Spring Boot无法从非字符串类型字段的发布请求中将JSON转换为pojo

时间:2018-08-16 15:51:48

标签: java json spring spring-boot

  

公共类Dog {私有字符串名称;       私有int权重;       ... getters和setters以及构造函数}

控制器

  

@RequestMapping(value =“ / dogs”,方法= RequestMethod.POST,产生   =“ application / json”)       公共无效createDog(狗狗){         保存博士(狗); }

当我使用json {“ name”:“ bark”,“ weight”:50}调用终结点时会怎么样? 我收到一个错误:

“无法将类型为'null'的值转换为必需的类型'int';嵌套异常为org.springframework.core.convert.ConversionFailedException:无法将类型'null的值从类型[null]转换为类型[int] ';嵌套异常是java.lang.IllegalArgumentException:无法将空值分配给原始类型”,             “ objectName”:“狗”,             “ field”:“ weight”,             “ rejectedValue”:null,             “ bindingFailure”:是的,             “ code”:“ typeMismatch”

“消息”:“验证失败,对象=“狗”。错误计数:1”,

edit:布尔型和双精度型出现相同的问题。我想我必须使用对象而不是原始对象?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果存在可能性对象接收到null,则不能使用类型原语,相同的int,char和boolean。

private int weight

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

答案 3 :(得分:0)

需要指定@RequestBody批注以指定我们将DOG对象作为请求正文的一部分发送:

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