Java 我是否需要编写自定义的HttpMessageConverter来传递列表<;长期>;作为restemplate的参数
我将Spring MVC用于Rest API,并尝试在控制器上调用以下方法:Java 我是否需要编写自定义的HttpMessageConverter来传递列表<;长期>;作为restemplate的参数,java,spring,rest,spring-mvc,resttemplate,Java,Spring,Rest,Spring Mvc,Resttemplate,我将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, @Re
@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;
}
这一切都很好,但我更希望不需要将Orgid列表转换为逗号分隔的字符串。我很沮丧,因为SpringMVC控制器将字符串转换回它期望的参数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);
}
我最好的选择是什么?我现在正计划继续将参数转换为rest模板调用的字符串,但我想知道是否有一个MessageConverter可以添加到我的RestTemplate中以使其工作。目前我只使用默认的MessageConverters。我尝试添加MappingJacksonMessageConverter
并更改我的内容类型头以支持json,但得到了相同的结果
谢谢。消息转换器不仅仅处理Java程序员感兴趣的Java类型(如
布尔值)。它的工作是将Java对象转换为字节流表示形式,该字节流表示形式的格式由媒体类型名称标识。Spring只为广泛使用的媒体类型提供媒体转换器。对于任意Java对象列表,没有广泛使用的媒体类型;怎么会有呢?至于整数列表;具有讽刺意味的是,我怀疑是否会有这样的类型,因为它太简单了一点。TSV(制表符分隔值)媒体类型是一种简单类型,可以表示一个简单的整数列表
因此,是的,您必须编写自己的转换器
@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]