SPRING:无法使用rest模板在post请求中传递参数

时间:2016-10-27 12:38:41

标签: java spring rest resttemplate

我正在使用Spring的Rest模板将带有数据的请求发布到Web服务。 这是我的客户端代码段 -

        RestTemplate restTemplate = new RestTemplate();

        MultiValueMap<String, RequestDefinition> map = new LinkedMultiValueMap<String, RequestDefinition>();
        map.add("requestJSON", someDataObject);

        MappingJackson2HttpMessageConverter jsonHttpMessageConverter = new MappingJackson2HttpMessageConverter();
        restTemplate.getMessageConverters().add(jsonHttpMessageConverter);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        restTemplate.postForObject(someUrl, map, String.class);

这是我的服务代码发布方法 -

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String reqJSONStr = (String) request.getParameter("requestJSON");

          // reqJSONStr is coming as null. No idea why  
          // some other logic follows here
    }

问题是,在我的servlet post方法中,requestJSON对象变为null。 有人可以指出我在这里犯的错误。

1 个答案:

答案 0 :(得分:1)

从我的评论中复制:

我猜你的数据是在json格式的请求体上,在request.getReader()中的某个地方...

如何将它作为参数传递,如果你的对象很复杂(在字段中有另一个对象),我认为你不能把它作为url参数传递给它。如果没有,请尝试这样的事情,如果您必须将对象作为url参数发送。您还需要逐个读取servlet中的对象。

RestTemplate rt = new RestTemplate();

rt.setMessageConverters(
        Arrays.asList(new HttpMessageConverter[]{new FormHttpMessageConverter(), new StringHttpMessageConverter()}));

MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
map.add("some", someDataObject.getSomeProperty().toString());
map.add("another", someDataObject.getAnotherProperty().toString());

String resp = rt.postForObject("http://scooterlabs.com/echo", map, String.class);

System.out.println(resp);

正如您所看到的,没有可以将对象转换为url编码参数的HttpMessageConverter,因此当您将MappingJackson2HttpMessageConverter放入转换器列表并尝试添加要请求的对象时,它将转换为JSON并且最终请求BODY。

就个人而言,我将我的servlet代码更改为可以从正文中读取JSON的内容。如果您尝试发送的复杂对象具有许多属性而不是url编码形式,则JSON是更好的选择。