Spring Boot(Jackson):如何避免将类名序列化为JSON

4

我要消费从一个REST应用程序暴露的一些XML,并希望将其作为JSON暴露在自己的REST服务中。

目前,我有以下POJO:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "salesMarket"
})
@XmlRootElement(name = "salesMarkets")
public class SalesMarkets {

protected List<SalesMarket> salesMarket;

public List<SalesMarket> getSalesMarket() {
    if (salesMarket == null) {
        salesMarket = new ArrayList<SalesMarket>();
    }
    return this.salesMarket;
   }

}

以下是产生的JSON结果:
  "salesMarkets": {
"salesMarket": [
  {
    "brands": {
      "brand": [
        "DAN"
      ]
    },
    "code": "999"
  },
  {
    "brands": {
      "brand": [
        "DAN"
      ]
    },
    "code": "208"
  }
]
}

我的问题是(使用Jackson注解),有没有一种方法可以避免类名被序列化为JSON?因此,我希望得到以下结果:
    "salesMarket": [{
    "brands": {
        "brand": [
            "DAN"
        ]
    },
    "code": "999"
}, {
    "brands": {
        "brand": [
            "DAN"
        ]
    },
    "code": "208"
}]

我在想在SalesMarkets类上使用一些Jackson注解...但是还没有成功 :-(

更新:

刚才意识到SalesMarket类是从另一个类中引用的,这就是为什么JSON中出现了“salesMarkets”。有没有一种方法可以注释SalesMarkets字段,使其被忽略但不忽略其中包含的字段?

@XmlRootElement(name = "product")
public class Product {

@XmlElement(required = true)
protected String propertyID;
@XmlElement(required = true)
protected String season;
**protected SalesMarkets salesMarkets;**
protected Information information;
protected Features features;
protected Location location;
protected Address address;
protected Buildings buildings;
protected Pictures pictures;
protected Media media;
protected Prices prices;
protected Offers offers;
protected Availabilities availabilities;
protected Services services;
protected Concepts concepts;
...

具有非空“salesMarkets”的“Product”实例的预期JSON是什么? - miensol
当前输出为: { "propertyID": "D7612", "season": "2016", "salesMarkets": { "salesMarket": [ { "brands": { "brand": [ "DAN" ] }, "code": "999" }, { "brands": { "brand": [ "DAN" ] }, "code": "208" } ] } },........ - Lars Rosenqvist
我想要摆脱冗余的"salesMarkets":,据我了解,这些来自Product.class中的引用。 - Lars Rosenqvist
1个回答

6
你需要删除 < /p> 标签。
@XmlRootElement(name = "salesMarkets")

或者在ObjectMapper上禁用该功能

objectMapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true)

为了进一步展开Product实例中的salesMarkets字段,您可以执行以下操作:

public class Product {
  protected SalesMarkets salesMarkets;

  public List<SalesMarket> getSalesMarkets(){
     if(salesMarkets != null){
       return salesMarkets.getSalesMarket();
     } else {
       return null;
     }
  }
}

感谢您的快速回复,不幸的是,我的问题有些变化,请查看上面的更新。 - Lars Rosenqvist
完美运行!你刚刚救了我的一天 - 谢谢 :-) - Lars Rosenqvist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接