我有一个webapp(Play框架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来实现吗?
答案 0 :(得分:0)
使用bean验证,您可以自己调用validate()
并处理Set<ConstraintViolation<T>>
的集合来实现此目的。
您首先需要获取一个Validator
对象。也许有一些方法可以做得更好,但是一种方法是使用工厂(过去使用过,它与类路径上的Hibernate验证程序依赖项一起工作):
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
然后使用验证器检索一组约束违规(假设具有相关约束注释的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类,您将获得一个点分隔的字段名称“路径”。