Spring Boot (Jackson):如何避免类名被序列化为 JSON
Posted
技术标签:
【中文标题】Spring Boot (Jackson):如何避免类名被序列化为 JSON【英文标题】:Spring Boot (Jackson): How to avoid class name being serialized to 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 中的参考
【参考方案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;
【讨论】:
感谢您的快速回复,不幸的是我的问题有所改变,请参阅上面的更新。 完美运行!你刚刚拯救了我的一天 - 谢谢:-)以上是关于Spring Boot (Jackson):如何避免类名被序列化为 JSON的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot (Jackson):如何避免类名被序列化为 JSON
如何将 Spring Boot 映射器从 Jackson 交换到 kotlinx.serialization
如何在 Spring Boot 中为 Camel 配置 Jackson ObjectMapper
如何使用 Spring Boot 为嵌套实体配置 Jackson 反序列化器
如何在 Spring Boot REST API 中启用对 JSON / Jackson @RequestBody 的严格验证?