【问题标题】:Prevent Jackson unmarshaller from throwing exception on first datatype mismatch防止 Jackson unmarshaller 在第一个数据类型不匹配时抛出异常
【发布时间】:2017-07-11 02:50:27
【问题描述】:

这里是java新手。可能这已经在某个地方之前被覆盖过,但我似乎无法找到它。 Java 8 + Spring 4 + Jackson 2 上的 RESTish 服务。我想做的是将 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”:猫,“val”:“狗”} unmarshaller 将在第一个节点上抛出异常并停止解析,要求客户端一个一个地修复问题并重新发布它们,以获得下一个错误响应。在这种特殊情况下,这可能不是问题,但在处理更大的数据集时会变得非常不可思议。所以我想以某种方式说服杰克逊勋爵在抛出异常之前解析整个事情。 有什么建议吗?

【问题讨论】:

    标签: java json spring jackson


    【解决方案1】:

    您可以使用custom deserializer

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 2018-12-23
      • 2022-01-01
      • 2014-05-23
      • 2016-12-18
      • 1970-01-01
      相关资源
      最近更新 更多