参考https://www.cnblogs.com/insaneXs/p/9515803.html
在反序列化含有自定义枚举类的类时,自定义枚举类的属性反序列化失败,
具体体现为得到枚举类的属性值时为null
解决方法:
1 添加自定义的编解码器:
publicclassEventTypeCodeimplementsObjectSerializer,ObjectDeserializer{
//反序列化过程
@Override
public<T> Tdeserialze(DefaultJSONParserdefaultJSONParser,Typetype,Objecto){
System.out.println("hellohahahahahahah");
Objectvalue=defaultJSONParser.parse();
returnvalue==null?null:(T)EventType.convert(TypeUtils.castToInt(value));
}
@Override
publicintgetFastMatchToken(){
return0;
}
//序列化
@Override
publicvoidwrite(JSONSerializerjsonSerializer,Objecto,Objecto1,Typetype,inti)throwsIOException{
jsonSerializer.write(((EventType)o).getValue());
}
}
2、修改EventModel类
public class EventModel {
@JSONField(serializeUsing = EventTypeCode.class, deserializeUsing = EventTypeCode.class)
private EventType eventType; //行为
private int actorId; //操作者
private int entityType; //对象 类型 id
private int entityId;
private int entityOwnerId; //对象相关者
private Map<String, String> exts = new HashMap<String, String>();
public EventModel setExt(String key, String value){
exts.put(key, value);
return this;
}
public EventModel(EventType type){
this.eventType = type;
}
public String getExts(String key){
return exts.get(key);
}
public EventType getEventType() {
return eventType;
}
public EventModel(){
}
public void setEventType(EventType eventType) {
this.eventType = eventType;
}
public int getActorId() {
return actorId;
}
public EventModel setActorId(int actorId) {
this.actorId = actorId;
return this;
}
public int getEntityType() {
return entityType;
}
public EventModel setEntityType(int entityType) {
this.entityType = entityType;
return this;
}
public int getEntityId() {
return entityId;
}
public EventModel setEntityId(int entityId) {
this.entityId = entityId;
return this;
}
public int getEntityOwnerId() {
return entityOwnerId;
}
public EventModel setEntityOwnerId(int entityOwnerId) {
this.entityOwnerId = entityOwnerId;
return this;
}
}
这样就可以解决