gpt4 book ai didi

java - RestTemplate 不适用于 APPLICATION_FORM_URLENCODED 和请求 Pojo

转载 作者:行者123 更新时间:2023-12-02 13:34:05 28 4
gpt4 key购买 nike

我正在使用restTemplate 来使用服务。

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity request = new HttpEntity(countryRequest, headers);
CountryResponse response = restTemplate.postForObject(countryURL, request, CountryResponse.class);

countryRequest 是一个 POJO 对象,只有一个字符串字段 coderestTemplatemessageConverters 中有 jackson2HttpMessageConverterFormHttpMessageConverter

我遇到以下异常:

org.springframework.web.client.RestClientException: 
Could not write request: no suitable HttpMessageConverter found for request type [CountryRequest] and content type [application/x-www-form-urlencoded]

但是如果我使用 MultiValueMap 而不是 CountryRequest,我会得到 200 响应:

MultiValueMap<String, String> map= new LinkedMultiValueMap<>();
map.add(code, "usa");
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity(map, headers);

有什么方法可以替代这里的MultiValueMap方法吗?

最佳答案

请求序列化主要有两种类型:通常的 FORM 数据或 JSON 对象。表单数据是最简单也是最古老的方法,它在 POST 有效负载中发送简单的键值对字符串。但是,当您需要发送一些具有嵌套属性的对象或一些列表甚至映射时,这就成了一个问题。这就是为什么每个人都尝试使用 JSON 格式,它可以更容易地反序列化为 POJO 对象。这是现代网络事实上的标准。

因此,在您的情况下,由于某种原因 RestTemplate 尝试序列化 CountryRequest 但它不知道如何将其序列化为 FORM 数据。尝试将 request 替换为您发送的 pojo:

CountryRequest request = new CountryRequest();                  
CountryResponse response = restTemplate.postForObject(countryURL, request, CountryResponse.class);

然后 RestTemplate 尝试将 CountryRequest 序列化为 JSON(这是默认行为)。

关于java - RestTemplate 不适用于 APPLICATION_FORM_URLENCODED 和请求 Pojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43103626/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com