Java 8 Jackson验证
我有一个springboot休息服务。用户传入一个json对象,该对象反序列化到此java pojo中:
public final class Request { private String id;
private double code;
private String name;
public String getId() {
return id;
}
public double getCode() {
return code;
}
public String getName() {
return name;
}
}
因此,用户需要传递以下json:
{ "id": “123457896”,
"code": "Foo",
"name": "test"
}
我想将所有这些字段都设为必填项。提供更少或更多的东西将引发异常。反序列化时,有没有办法告诉杰克逊验证输入?我已经尝试过了,@JsonProperty(required=true)
但这是行不通的。显然,从这里到这里似乎JsonProperty
都没有遵守注释。
我在控制器中调用了这个验证器:
@Componentpublic class RequestValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return false;
}
@Override
public void validate(Object target, Errors errors) {
String id = ((Request) target).getId();
if(id == null || id.isEmpty()) {
throw new InvalidRequestException("A valid id is missing. Please provide a non-empty or non-null id.");
}
}
}
但这在每个领域都显得乏味且丑陋。因此,鉴于我正在使用Java 8,Spring
Boot和最新版本的Jackson,在验证传入的json输入方面的最佳实践是什么?还是我已经以最新的方式进行了?
回答:
您使用了Spring Validator方法。还有另一种方法:
J2EE JSR-303 / JSR-349 Bean验证API。它提供验证注释(javax,而不是jackson)。
在这里看到两个很好的例子
以上是 Java 8 Jackson验证 的全部内容, 来源链接: utcz.com/qa/414455.html