【发布时间】:2013-12-05 18:28:42
【问题描述】:
我正在将 Spring MVC 用于 Rest API,并尝试在控制器上调用以下方法:
@RequestMapping(method=RequestMethod.POST, value=IApiVersion.VERSION_ALL_PREFIX + ORG_RESPONSE_PAUSE_WRITES_URL)
public @ResponseBody Boolean setResponsePauseWrites(@RequestParam List<Long> orgIds, @RequestParam boolean pauseWrites){
validateDatabusClient();
organizationService.setPauseResponseWrites(orgIds, pauseWrites);
return Boolean.TRUE;
}
我正在使用 Spring 的RestTemplate 来提交这样的请求:
@Override
public void setPauseWrites(List<Long> orgIds, boolean pauseWrites){
String orgIdString = StringUtils.collectionToCommaDelimitedString(orgIds);
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
parameters.add("orgIds", orgIdString);
parameters.add("pauseWrites", Boolean.toString(pauseWrites));
restTemplate.postForObject(orgResponsePauseWritesURL, parameters, Boolean.class);
}
这一切都很好,但我宁愿不需要将 orgIds 列表转换为逗号分隔的字符串。我很沮丧,因为 spring mvc 控制器将字符串转换回它期望的参数 List 和 boolean 没有问题。我希望 RestTemplate 有一个内置的消息转换器来处理基本的 java 类,如 List 和 Boolean。
当我尝试这段代码时:
@Override
public void setPauseWrites(List<Long> orgIds, boolean pauseWrites){
MultiValueMap<String, Object> parameters = new LinkedMultiValueMap<>();
parameters.add("orgIds", orgIds);
parameters.add("pauseWrites", Boolean.valueOf(pauseWrites));
restTemplate.postForObject(orgResponsePauseWritesURL, parameters, Boolean.class);
}
我收到以下异常消息:
org.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [java.util.ArrayList]
我最好的选择是什么?我现在计划继续将参数转换为字符串以进行其余模板调用,但我想知道是否有一个 MessageConverter 我可以添加到我的 RestTemplate 以使其工作。目前我只是使用默认的 MessageConverters。我尝试添加 MappingJacksonMessageConverter 并更改我的内容类型标头以支持 json,但我得到了相同的结果。
谢谢。
【问题讨论】:
标签: java spring rest spring-mvc resttemplate