【问题标题】:Spring Boot Failed to Convert JSON to pojo from POST request for fields that are not of type stringSpring Boot 无法将非字符串类型字段的 POST 请求中的 JSON 转换为 pojo
【发布时间】:2019-01-23 15:30:47
【问题描述】:
 public class Dog {
   private String name;
   private int weight;
     //...getters and
    //setters and constructor 
 }

控制器:

 @RequestMapping(value = "/dogs", method = RequestMethod.POST, 
 produces = "application/json")
 public void createDog(Dog dog) {
    dr.save(dog); 
 }

当我用 json {"name":"bark", "weight":50} 调用端点时怎么会这样? 我收到一个错误:

无法将“null”类型的值转换为所需的“int”类型;嵌套的 例外是 org.springframework.core.convert.ConversionFailedException: 失败 从类型 [null] 转换为类型 [int] 以获取值“null”;嵌套的 异常是 java.lang.IllegalArgumentException:空值不能 分配给原始类型”, "objectName": "狗", “场”:“重量”, “拒绝值”:空, “绑定失败”:真, “代码”:“类型不匹配”

"message": "object='dog' 的验证失败。错误计数:1

编辑:我在布尔值和双精度值方面遇到了同样的问题。我想我必须使用对象而不是原语?

【问题讨论】:

    标签: java json spring spring-boot


    【解决方案1】:

    仅适用于对象,因此请使用 Integer 而不是 int。

    【讨论】:

      【解决方案2】:

      如果存在可能的对象接收null,则不能使用类型基元,相同的int,char,boolean。

      private int weight
      

      使用类型对象相同的Integer,Boolean ...对于一个类型基元有一个Object,然后可以接收空值。

      【讨论】:

        【解决方案3】:

        create 方法中将注释@RequestBody 添加到参数dog

        【讨论】:

        • 啊。谢谢。 15个字符
        • 确实如此。我只是错过了这个符号。谢谢!
        【解决方案4】:

        需要指定@RequestBody注解来指定我们发送DOG对象作为请求体的一部分:

        @RequestMapping(value = "/dogs", method = RequestMethod.POST, produces = "application/json") 
        public void createDog((**@RequestBody** Dog dog) { dr.save(dog); }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-27
          • 2014-09-04
          • 2021-11-04
          • 1970-01-01
          • 2020-08-04
          相关资源
          最近更新 更多