我有一个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都没有遵守注释。
我在控制器中调用了这个验证器:
@Component
public 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输入方面的最佳实践是什么?还是我已经以最新的方式进行了?