我有一个 springboot 休息服务。用户传入一个反序列化到这个 java pojo 中的 json 对象:
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 输入方面的最佳实践是什么?还是我已经以最新的方式进行了?
原文由 Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议
您使用了 Spring Validator 方法。还有另一种方法:
J2EE JSR-303/JSR-349 Bean 验证 API。它提供验证注释(javax,不是 jackson)。
在 这里 查看两者的好例子