我不确定这是否可能,因为它与@XmlPath 本身的语义相矛盾,但如果是,请帮我解决这个问题。
我通过从我的 API 实现中调用一些外部 API 来获取这个 json
{
"title": "Forrest Gump",
"writingCredits": {
"novel": "Winston Groom",
"screenplay": "Eric Roth"
},
"directedBy": "Robert Zemeckis",
"casts": ["Tom Hanks", "Rebecca Williams", "Sally Field"],
"releaseDate": "1994-06-07T00:00:00.000Z",
"producedBy": {
"producers": ["Wendy Finerman", "Steve Starkey"],
"co-producers": ["Charles Newrith"]
}
}
并将其映射到以下 POJO,该 POJO 将作为资源从我自己的 API 返回
public class Film
{
private String title;
@XmlPath("writingCredits/screenplay/text()")
private String writer;
@XmlPath("directedBy/text()")
private String director;
@XmlPath("casts[0]/text()")
private String actor;
@XmlJavaTypeAdapter(DateUnmarshaller.class)
@XmlPath("releaseDate/text()")
private int releaseYear;
@XmlPath("producedBy/producers[0]/text()")
private String producer;
private String category;
//Commented getters and setters to save space
}
在这里,我可以使用 MOXy 将必要的信息映射到我的 POJO,但在编组时遇到问题。虽然编组它保留了接收到的 json 的原始嵌套结构,但我的 POJO 结构没有嵌套,我的意思是它没有引用任何其他 POJO。当我将我的 POJO 编组为 json 时,我能得到这样的东西吗:
{
"title": "Forrest Gump",
"writer": "Eric Roth",
"director": "Robert Zemeckis",
"actor": "Tom Hanks",
"releaseYear": 1994,
"producer": "Wendy Finerman"
}
但相反,它显示如下:
{
"title": "Forrest Gump",
"writingCredits": {
"screenplay": "Eric Roth"
},
"directedBy": "Robert Zemeckis",
"casts": "Tom Hanks",
"releaseDate": 1994,
"producedBy": {
"producers": "Wendy Finerman"
}
}
那么,有什么办法可以解决这个问题吗?
还有一件事,对于类别属性,如果接收到的 json 中存在特定的 json 条目,我想确定它的值,例如,如果接收到的 json 包含类似的 json 条目
"animationInfo": {
"studio" : "pixar",
"some extra info" : [],
"and some more" : {}
}
那么类别应设置为“动画”。我需要为它再写一个 XmlAdapter 吗?
谢谢..!