【问题标题】:Spring Boot (Jackson): How to avoid class name being serialized to JSONSpring Boot (Jackson):如何避免类名被序列化为 JSON
【发布时间】:2016-09-08 02:23:56
【问题描述】:

我正在使用一些从 REST 应用程序公开的 XML,并希望在我自己的 REST 服务中将其公开为 JSON。

现在我有以下 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 类是从另一个类引用的 - 这就是“salesMarkets”出现在 JSON 中的原因。有没有办法注释 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;
...

【问题讨论】:

  • Product 不为空的 salesMarkets 实例的预期 json 是什么?
  • 当前输出为:{ "propertyID": "D7612", "season": "2016", "salesMarkets": { "salesMarket": [ { "brands": { "brand": [ "DAN" ] }, "code": "999" }, { "brands": { "brand": [ "DAN" ] }, "code": "208" } ] } },........
  • 我想去掉多余的 "salesMarkets":,据我了解,它来自 Product.class 中的参考

标签: json rest spring-boot jackson


【解决方案1】:

您需要删除

@XmlRootElement(name = "salesMarkets")

或者在ObjectMapper上禁用the feature

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;
     }
  }
}

【讨论】:

  • 感谢您的快速回复,不幸的是我的问题有所改变,请参阅上面的更新。
  • 完美运行!你刚刚拯救了我的一天 - 谢谢:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 2016-04-09
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 2017-09-09
相关资源
最近更新 更多