防止杰克逊unmarshaller在第一次数据类型不匹配时抛出异常

时间:2017-02-21 13:00:34

标签: java json spring jackson

java newb here。可能以前已经介绍过了,但我似乎无法找到它。 在Java 8 + Spring 4 + Jackson上重新启动服务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来处理HttpMessageNotReadableException,所以它会返回某种描述性的JSON,指出错误。

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

1 个答案:

答案 0 :(得分:-1)

您可以使用custom deserializer

或者您可以在REST服务中验证传入的JSON数据!  As explained here