Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否需要编写自定义的HttpMessageConverter来传递列表<;长期>;作为restemplate的参数_Java_Spring_Rest_Spring Mvc_Resttemplate - Fatal编程技术网

Java 我是否需要编写自定义的HttpMessageConverter来传递列表<;长期>;作为restemplate的参数

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

我将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;
}
这一切都很好,但我更希望不需要将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]