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

SPRING: Unable to pass parameters in a post request using rest template

我正在使用 Spring 的 Rest 模板 post 向 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);

这是我的服务器代码post方法-

    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 对象为空。 有人可以指出我在这里做的错误吗?

从我的评论中复制:

我猜你的数据在 json 格式的请求正文中,在 request.getReader()...[=11= 的某处]

关于如何将其作为参数传递,如果您的对象很复杂(内部有另一个对象作为字段),我认为您无法将所有对象作为 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 是更好的选择。