在Spring框架中,当你遇到HttpMessageNotReadableException这样的错误,通常是因为Spring的HTTP消息转换器(如Jackson)无法将接收到的JSON数据正确地映射到你的控制器方法的参数上。在你的情况中,错误消息“Cannot deserialize value of type java.lang.Integer from Object value (token JsonToken.START_OBJECT)”明确指出,JSON解析器期望得到一个整数值,但却收到了一个对象(即JSON对象,以{开始,以}结束)。
这个问题通常发生在以下几种情况:
控制器方法的参数类型与JSON结构不匹配:你的控制器方法可能期望一个整数(Int或Integer),但发送的JSON是一个对象。
请求映射可能错误:可能你的请求没有正确映射到期望的控制器方法,或者你的前端发送了错误的请求体或请求头。
解决方案:
方案一:调整JSON结构
如果你的控制器方法只需要detId的值,你应该确保发送的JSON是一个简单的整数值或者是一个包含单个整数字段的JSON对象,但你的方法应该能够处理这种结构。然而,由于你提到的是Int类型,最简单的方式是直接发送整数值:
1
方案二:将Controller层的接口入参设置成对象,使用@RequestBody解析入参,映射到对象中
@PostMapping("/someEndpoint")
public ResponseEntity<?> someMethod(@RequestBody DetIdWrapper detIdWrapper) {
Integer detId = detIdWrapper.getDetId();
// 你的逻辑
return ResponseEntity.ok().build();
}