gpt4 book ai didi

JSON 负载的 Java 验证 : return errors as a tree

转载 作者:行者123 更新时间:2023-11-30 12:05:51 25 4
gpt4 key购买 nike

我有一个网络应用程序(Play framework 2.x,Java)接收 JSON 负载作为输入。

我有不同形状的输入有效载荷,例如:

{
files: [{id: 1,name: null}}
requiredAttribute: null,
}

我想以这种形式输出错误,类似于输入:

{
files: [{name: "name can't be null"}}
requiredAttribute: "requiredAttribute can't be null",
}

我想知道如何使用 Java 以这种形式输出错误而不会太痛苦。

我知道我将失去为每个字段输出多个错误的能力,我对此没有意见。

我可以使用任何外部库,只要它很容易在字段上声明约束,所以使用 Java 验证和验证约束注释之类的东西会很好。但是到目前为止,我找不到对此类内容的任何支持。知道如何使用 Play 或 Java 验证或 Jackson 来完成吗?

最佳答案

使用 bean 验证,您可以通过调用 validate() 来实现此目的自己处理 Set<ConstraintViolation<T>> 的集合.

您首先需要获得一个 Validator 目的。可能有一些方法可以更好地做到这一点,但一种方法是使用工厂(过去使用过它,它与类路径上的 Hibernate validator 依赖项一起工作):

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

然后使用 validator 检索一组约束违规(假设具有相关约束注释的 bean 类的泛型类型 T):

Set<ConstraintViolation<T>> constraintViolations = validator.validate(myBean);

Map<String, String> fieldErrors = new HashMap<>();
for (ConstraintViolation<T> violation : constraintViolations) {
String message = violation.getMessage();
String field = violation.getPropertyPath().toString();
fieldErrors.put(field, message);
}

请注意,对于嵌套的 bean 类,您将获得一个以点分隔的字段名称“路径”。

关于JSON 负载的 Java 验证 : return errors as a tree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55967788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com