我在Spring控制器中遇到以下异常:
WARN o.s.w.s.m.s.DefaultHandlerExceptionResolver - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Mar 24, 2017; nested exception is com.google.gson.JsonSyntaxException: Mar 24, 2017
我正在使用的模型:
public class ProductCommons {
private Integer id;
...
private Date createdAt;
private Date deletedAt;
//getters and setters here
}
我正在尝试将购物车对象发布为json,这是我在该购物车对象上执行GET请求时获得的相同(但已修改)的对象。现在,购物车对象有一个 CartItem 的嵌套列表(是的,另一个模型)。每个CartItem由产品(另一个型号-_-)组成,每个产品由(最终) ProductCommons 对象组成。
@RequestMapping(value = "someval", method = RequestMethod.POST, consumes = "application/json")
public Cart add(HttpServletRequest request, @RequestBody Cart cart, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return new Cart();
}
// application logic here
}
当我发送帖子请求时,我收到 400 响应,并显示以下消息: 客户端发送的请求在语法上不正确。
但如果我从ProductCommons json部分中删除createdAt字段,我就可以成功接收数据。请注意,我还可以接收已在cartItem对象和cart对象中发送的数据。 虽然在这里执行添加操作并不是完全必需的createdAt日期,但我觉得我应该知道为什么在ProductCommons对象中无法解析相同的格式化日期,但是当单个请求包含所有这些日期时,在Cart和CartItem对象中进行解析?
另外,请注意我在这里不使用gson来解析任何json。
我的json的结构是(我已经验证了一千次):
{
id: 1,
...,
createdAt: "Mar 17, 2017",
cartItems: [{
id: 1,
...,
product: {
id: 1,
...,
productCommons: {
id: 1,
...,
createdAt: "Mar 17, 2017"
}
},
createdAt: "Mar 16, 2017"
}]
}