zoukankan      html  css  js  c++  java
  • no suitable HttpMessageConverter found for request type [java.lang.Integer]

    今天在使用Spring Template的时候遇到了这个异常:

    no suitable HttpMessageConverter found for request type [java.lang.Integer]

    Google了一下然后在stackoverflow上面找到了解决方案:

    I have a method in Spring rest service.

      @RequestMapping(value = "test/process", method = RequestMethod.POST)
      public @ResponseBody MyResponse processRequest(String RequestId, int count)
    

    I am using Spring RestTemplate to call this service like this.

      RestTemplate restTemplate = this.getRestTemplate();
      MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
      map.add("RequestId", RequestId);
      map.add("count", count); 
      restTemplate.postForObject(url, map,MyResponse.class);
    

    When I try to invoke the client method I get the exception that no suitable HttpMessageConverter found for request type [java.lang.Integer]

    org.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Integer]
    at org.springframework.http.converter.FormHttpMessageConverter.writePart(FormHttpMessageConverter.java:310)
    at org.springframework.http.converter.FormHttpMessageConverter.writeParts(FormHttpMessageConverter.java:270)
    at org.springframework.http.converter.FormHttpMessageConverter.writeMultipart(FormHttpMessageConverter.java:260)
    at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:200)
    at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:1)
    at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:596)
    

    I know one of the ways is to pass all the parameters as String. But I might need to pass complex data types as parameters later. What is the ways to achieve this. I have googled and some option seem to be writing my own converters. How should I start about solving this problem.

    解决办法

    The root cause of this error is that by specifying an Integer in the LinkedMultiValueMap, the RestTemplate will take that to mean that your request is a multipart request. There is no HttpMessageConverter registered by default that can handle writing values of type Integer to a request body.

    As you said, you can handle this situation by changing the count to be a String. After all, there is no Integer type in HTTP request parameters. However, you were worried

    But I might need to pass complex data types as parameters later.

    Assume something like this

      public @ResponseBody MyResponse processRequest(String RequestId, int count, Complex complex) 
    

    with

    public class Complex {
        private String someValue;
        private int intValue;
    
        public String getSomeValue() {
            return someValue;
        }
    
        public void setSomeValue(String someValue) {
            this.someValue = someValue;
        }
    
        public int getIntValue() {
            return intValue;
        }
    
        public void setIntValue(int intValue) {
            this.intValue = intValue;
        }
    
        public String toString() {
            return someValue + " " + intValue;
        }
    }
    

    The the following will work just fine

    MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
    map.add("RequestId", "asd");
    map.add("count", "42");
    map.add("someValue", "complex");
    map.add("intValue", "69");
    restTemplate.postForObject(url, map,MyResponse.class);
    

    Remember that the request parameters are used to populate the fields of model attributes by their names.

    An even better solution would have you using a serialization standard like JSON or XML.I mean instead of sending request parameters, you should send JSON and XML. Spring supports those types with @RequestBody annotation on handler method parameters.

  • 相关阅读:
    zbb20170802 Windows平台使用Gitblit搭建Git服务器图文教程
    zbb20170728 oracle 查看被锁对象
    zbb20170726 Spring Controller 获取请求参数的几种方法
    zbb20170726 spring访问静态文件访问
    zbb20170720 extjs 类似桌面的页面布局
    zbb20170718 Eclipse 导入外部项目无法识别为web项目并且无法在部署到tomcat下
    zbb20170717Spring4 MVC Hibernate4集成 Annotation maven 各种版本
    zbb20170630 web项目发布至tomcat的ROOT下方法(开发环境和部署环境)
    3.语句的增删改查
    1、java面试
  • 原文地址:https://www.cnblogs.com/rollenholt/p/3934649.html
Copyright © 2011-2022 走看看