java – 在JSON对象中强制执行非空字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在JSON对象中强制执行非空字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2853字,纯文字阅读大概需要5分钟。
内容图文
![java – 在JSON对象中强制执行非空字段](/upload/InfoBanner/zyjiaocheng/708/4bbbb29ee89a4a018865f5d4aeecb643.jpg)
我们的REST API接收一些JSON对象输入,其中某些字段必须不为null.那些可以是String / Integer,也可以是其他类实例作为引用.
我们试图找到一种方法来强制这些字段不为null,而不是在API中进行空检查的正确方法.
当前:
if (myObject.getSomeOtherObject() == null)
throw new SomeException();
我们想拥有的是:
class MyObject{
@Required
OtherObject someOtherObject;
// ...
}
我们尝试了3件事:
1)升级到jackson 2.0.6并使用注释com.fasterxml.jackson.annotation.JsonProperty
但是,这看起来不起作用.找到那些参考:
http://jira.codehaus.org/browse/JACKSON-767
2)扩展JsonDeserializer以检查null但问题是它甚至没有在null输入上执行.
public class NotNullDeserializer<T> extends JsonDeserializer<T> {
@Override
public T deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException, JsonProcessingException {
ParameterizedType superClass = (ParameterizedType) getClass().getGenericSuperclass();
Class<T> type = (Class<T>) superClass.getActualTypeArguments()[0];
T t = jsonparser.readValueAs(type);
if (t == null){
String classNameField = type.getName();
String field = jsonparser.getCurrentName();
throw new WrongInputException("The field '"+field+"' of type '"+classNameField+"' should not be null.");
}
return t;
}
}
public class NotNullAddressDeserializer extends NotNullDeserializer<Address> {
}
@JsonDeserialize(using=NotNullAddressDeserializer.class)
Address to;
3)编写我们自己的@Required注释并尝试使用ResourceFilter进行检查,但似乎我无法从ContainerRequest获取实际对象,即使我们可以,也不确定如何在object.otherObject.someObject中执行深度检查空引用. fieldNotNullable
private class Filter implements ResourceFilter, ContainerRequestFilter {
private final ArrayList<String> requiredParameters;
protected Filter() {
requiredParameters = null;
}
protected Filter(ArrayList<String> requiredParameters) {
this.requiredParameters = requiredParameters;
}
@Override
public ContainerRequestFilter getRequestFilter() {
return this;
}
@Override
public ContainerResponseFilter getResponseFilter() {
return null;
}
@Override
public ContainerRequest filter(ContainerRequest request) {
if (requiredParameters != null && requiredParameters.size() > 0) {
MultivaluedMap<String, String> params = request.getQueryParameters();
params.putAll(request.getFormParameters());
StringBuffer missingParams = new StringBuffer();
for (String reqParam : requiredParameters) {
List<String> paramValues = params.get(reqParam);
if (paramValues == null || paramValues != null && paramValues.size() == 0)
missingParams.append(reqParam + ",");
}
if (missingParams.length() > 0)
throw new WrongInputException("Required parameters are missing: " + missingParams);
}
return request;
}
}
解决方法:
JAX-RS很好地区分了验证中的反序列化,即Jackson没有设计任何机制来强制值为非null等等.相反,您可以使用BeanValidation:
>在提供的范围内向javax.validation:validation-api添加依赖项.
>将javax.validation.constraints.NotNull注释添加到您的字段中.
有关详细信息,请转到here.
内容总结
以上是互联网集市为您收集整理的java – 在JSON对象中强制执行非空字段全部内容,希望文章能够帮你解决java – 在JSON对象中强制执行非空字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。