gpt4 book ai didi

java - 使用spring for android休息POST对象

转载 作者:IT老高 更新时间:2023-10-28 13:44:21 27 4
gpt4 key购买 nike

我正在尝试使用 spring for android 发布到休息服务(我是新手)

restful 服务有这个结构

@POST
@Path("/ider")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public SearchOutRO hashTrackInJSON(SearchInRO in);

with(缩短的目标代码):

public class SearchInRO implements Serializable {
private Double latitud;
private Double longitud;
}

public class SearchOutRO implements Serializable {
private Integer searchId;
}

所以我正在尝试这个(来自 android)

String url = BASE_URL + "ider";
HttpHeaders requestHeaders = new HttpHeaders();

requestHeaders.setContentType(MediaType.APPLICATION_JSON);

MultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>();
body.add("searchInRO[latitud]", String.valueOf(user.getLatitud()));
body.add("searchInRO[longitud]", String.valueOf(user.getLongitud()));

HttpEntity<?> requestEntity = new HttpEntity<Object>(body, requestHeaders);
RestTemplate restTemplate = new RestTemplate();

List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
messageConverters.add(new FormHttpMessageConverter());
messageConverters.add(new StringHttpMessageConverter());
restTemplate.setMessageConverters(messageConverters);
try {
ResponseEntity<SearchOutRO> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, SearchOutRO.class);

HttpStatus status = response.getStatusCode();
if (status == HttpStatus.CREATED) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}

并得到这个异常:

org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.util.LinkedMultiValueMap] and content type [application/json]

您能帮我指出我做错了什么吗?(​​以及如何改正)。
我认为它可能是“body”MultiValueMap。

提前致谢

编辑:我尝试了@Krisl 的建议。我成功连接到服务器端,但似乎对象未正确编码。

WARNING: javax.xml.bind.UnmarshalException
- with linked exception:
[javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"latitud"). Expected elements are <{}searchInRO>]

我会很感激任何想法。

最佳答案

看来你的假设是对的,MultiValueMap 造成了麻烦。

试试这个

在 SearchInRO 对象中设置 lat 和 lng 而不是使用 MultiValueMap 并添加它。

改变

HttpEntity<?> requestEntity = new HttpEntity<Object>(body, requestHeaders);

SearchInRO searchInRO = new SearchInRO();

设置纬度和经度

HttpEntity<?> requestEntity = new HttpEntity<Object>(searchInRO , requestHeaders);

同时添加 MappingJacksonHttpMessageConverter

 messageConverters.add(new MappingJacksonHttpMessageConverter());

更新:我刚刚检查了一个使用 REST 的旧项目,并注意到我也使用了 jersey-json jar(我的案例 maven 依赖项)。
尝试将 jersey-json jar 添加到您的类路径并更新 web.xml,如下所示

<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>

关于java - 使用spring for android休息POST对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15354253/

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