Pre*_*bia 3 java json transformation gson
在使用GSON API将Java对象转换为Json字符串时,如果任何带注释的属性为null,我还希望失败此Json转换.
例如
public class Order{
@SerializedName("orderId")
@Expose
@Required
private Integer id;
//getter & setter available for id
}
Run Code Online (Sandbox Code Playgroud)
就像我在做的那样
Order order = new Order();
JSONObject jsonobj = new JSONObject(gson.toJson(order));
Run Code Online (Sandbox Code Playgroud)
如果任何@Required属性为null,我想让上面的Java失败到Json转换这是否可以使用GSON?
我想让Java失败到Json转换,如果任何Java属性为null,注释为@Required,我可以使用以下方法实现此目的.如果您发现任何问题,请与我们联系:
class RequiredKeyAdapterFactory implements TypeAdapterFactory {
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type);
return new TypeAdapter<T>() {
@Override
public void write(JsonWriter out, T value) throws IOException {
if (value != null) {
Field[] fields = value.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
if (fields[i]
.isAnnotationPresent(Required.class)) {
validateNullValue(value, fields[i]);
}
}
}
delegate.write(out, value);
}
private <T> void validateNullValue(T value, Field field) {
field.setAccessible(true);
Class t = field.getType();
Object v = null;
try {
v = field.get(value);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new IllegalArgumentException(e);
}
if (t == boolean.class && Boolean.FALSE.equals(v)) {
throw new IllegalArgumentException(field + " is null");
} else if (t.isPrimitive()
&& ((Number) v).doubleValue() == 0) {
throw new IllegalArgumentException(field + " is null");
} else if (!t.isPrimitive() && v == null) {
throw new IllegalArgumentException(field + " is null");
}
}
@Override
public T read(JsonReader in) throws IOException {
return delegate.read(in);
}
};
}
}
RequiredKeyAdapterFactory requiredKeyAdapterFactory = new RequiredKeyAdapterFactory();
Gson gson = new GsonBuilder().registerTypeAdapterFactory(requiredKeyAdapterFactory)
.create();
Run Code Online (Sandbox Code Playgroud)
这很有效
| 归档时间: |
|
| 查看次数: |
2559 次 |
| 最近记录: |