Object 如何在java.util.ArrayList上添加JsonTypeInfo(注释)
我的POJO:Object 如何在java.util.ArrayList上添加JsonTypeInfo(注释),object,serialization,jersey,jackson,Object,Serialization,Jersey,Jackson,我的POJO: public class Album{ private String title; private Object tracks; // I can not change the type, beyond my control.. /** setter **/ .... /** getter **/ .... } public class Track{ private String title; pr
public class Album{
private String title;
private Object tracks; // I can not change the type, beyond my control..
/** setter **/
....
/** getter **/
....
}
public class Track{
private String title;
private String singer;
/** setter **/
....
/** getter **/
....
}
主要方法:
public static void main(String[] args)
{
Album album = new Album ();
album.setTitle("Thriller");
Track track = new Track();
track.setTitle("Beat It");
track.setSinger("M.J");
List<Track> trackLst = new ArrayList<Track>();
trackLst.add(track);
Album.setTracks(trackLst);
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT, As.PROPERTY);
m.writeValue(System.out, album);
}
/** console printed **/
{
"title": "Thriller";
"tracks":[
"java.util.ArrayList",
[
{
"@class":"com.hs.Track",
"title":"Beat It",
"singer":"M.J"
}
]
]
}
问题是类型声明
私有对象跟踪
,这会导致属性与定义匹配,并强制使用列表的类型信息。如果声明为列表
,则不会发生这种情况
您可以使用“混合注释”来关联注释,如:
public class MixIn {
@JsonDeserialize(as=List.class)
@JsonSerialize(as=List.class)
private Object tracks;
}
并注册mix-in以应用于类
相册
。这应该表明预期的类型是列表
,并避免包含类型信息谢谢,但曲目并不总是列表,它可以是常规pojo(如曲目),有什么提示吗?更改JSON?我不认为像Java这样的语言使用“List或POJO”这样的联合类型有什么意义;从打字的角度来看,它们很难处理。或者,如果必须的话,编写一个自定义反序列化程序。非常感谢~我想我必须编写一个反序列化程序。
public class MixIn {
@JsonDeserialize(as=List.class)
@JsonSerialize(as=List.class)
private Object tracks;
}