怎样才能在java.util.ArrayList中

添加JsonTypeInfo(注释)我的POJO:怎样才能在java.util.ArrayList中

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"

}

]

]

}

正如你可以看到,跟踪序列化到一个jsonArray,一个元素是类型(ArrayList),另一个是真正的jsonArray。有没有解决方案只是保持真正的jsonArray?像这样:

{ 

"title": "Thriller";

"tracks":

[

{

"@class":"com.hs.Track",

"title":"Beat It",

"singer":"M.J"

}

]

}

回答:

的问题是类型声明private Object tracks,这将导致要匹配的属性定义和强制使用的用于列表类型的信息也是如此。如果它被宣布为List<?>,这不会发生。你可以做

一件事是用“混合式注释”,以注释像联想:

public class MixIn { 

@JsonDeserialize(as=List.class)

@JsonSerialize(as=List.class)

private Object tracks;

}

和注册混入物适用于Album类。这应该表明预期的类型是List,并避免包含类型信息

以上是 怎样才能在java.util.ArrayList中 的全部内容, 来源链接: utcz.com/qa/265102.html

回到顶部