使用Spring Controller解析Json Date对象会导致JsonSyntaxException对某些对象正常工作,但在嵌套对象

时间:2017-03-28 18:57:27

标签: java json spring spring-mvc

我在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"

    }]
}

0 个答案:

没有答案