防止Jackson Unmarshaller在第一个数据类型不匹配上抛出异常



java newb在这里。可能以前在某个地方涵盖过,但我似乎找不到它。在Java 8 Spring 4 Jackson 2上的RESTINS服务2.我想做的是将JSON变成对象。最小设置可以很好地工作:

public class A {
    private int id;
    private double val;
    getters/setters
}

然后我有我的RestController:

@RestController
@RequestMapping(value = "/item/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public class MyController {
    public A test(@Valid @RequestBody A a) {
        return a;
    }
}

如果我发布有效的JSON

{"id": 1, "val":5.55}

所有都是花花公子。如果我发布

{"id": cat, "val":5.55}

默认情况下,我得到400的响应。我可以定义@ExceptionHandler处理httpmessagenotradableexception,因此它将返回某种描述性JSON,指出错误。

问题是,如果我在JSON中遇到一个以上的错误,例如: {" id":cat," val":" dog"}Unmarshaller将在第一个节点上抛出异常并停止解析,要求客户一一解决问题并重新发布问题,只是为了获得下一个错误响应。在这种特殊情况下,这可能不是问题,但是在处理较大的数据集时,它变得非常不可思议。因此,我想以某种方式说服杰克逊勋爵在抛出例外之前将整个事情解析。建议?

您可以使用自定义Deserializer

或者您可以在REST服务中验证传入的JSON数据!! 如下所述

最新更新