我有以下设置:
public static class MyPojoImpl {
@SerializedName("myNumber")
private int myNumber;
@SerializedName("myType")
private String myType;
@Override
public List<String> getMyNumber() {
return myNumber;
}
@Override
public @Type String getMyType() {
return myType;
}
@StringDef({Type.ONE,
Type.TWO,
Type.THREE})
@Retention(RetentionPolicy.SOURCE)
@interface Type {
String ONE = "ONE";
String TWO = "TWO";
String THREE = "THREE";
}
}
我有一个来自JSON的字符串值myType
。我想将此字符串值仅限制为某些值。在将myType
设置为我的对象之前,有没有办法拦截它?
我知道我可以通过将type
转换为枚举来实现此目的,但我希望完全避免使用枚举。或者,我也可以将检查逻辑放在getter中,但这不太有效。
杰克逊允许使用setter。 GSON中有类似的内容吗?
答案 0 :(得分:3)
是的,您可以通过实施JsonDeserializer
private class DateTimeDeserializer implements JsonDeserializer<MyPojoImpl> {
public MyPojoImpl deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
MyPojoImpl pojoImpl = new MyPojoImpl();
// Do the Processing here
return pojoImpl
}
}
GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(MyPojoImpl.class, new DateTimeDeserializer());