如何使用注释反序列化json

2020-08-27 11:49发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我正在使用hybris 1808,我创建了一个rest服务来使用json。

问题是我不能解析属性,因为名称是不同的,但是使用注释就足以解决它。

无法正常工作

json属性:" description_short":"常规剪裁,圆领,短袖。由超长皮马棉制成。",

java属性@JsonProperty(" description_short")私有字符串descriptionShort;

繁重的工作

json属性:" description_short":"常规剪裁,圆领,短袖。由超长皮马棉制成。",

java属性@JsonProperty(" description_short")私有字符串description_short;

我已经尝试过用杰克逊,格森...但是什么都没用,只是在json和java attibute中具有相同的名称

预先感谢

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我正在使用hybris 1808,我创建了一个rest服务来使用json。

问题是我不能解析属性,因为名称是不同的,但是使用注释就足以解决它。

无法正常工作

json属性:" description_short":"常规剪裁,圆领,短袖。由超长皮马棉制成。",

java属性@JsonProperty(" description_short")私有字符串descriptionShort;

繁重的工作

json属性:" description_short":"常规剪裁,圆领,短袖。由超长皮马棉制成。",

java属性@JsonProperty(" description_short")私有字符串description_short;

我已经尝试过用杰克逊,格森...但是什么都没用,只是在json和java attibute中具有相同的名称

预先感谢

付费偷看设置
发送
2条回答
Nan4612
1楼-- · 2020-08-27 12:44

您好,Carlos
作为解决方法,我可以建议下一种方法:在DTO类中使用 javax.xml.bind.annotation。* 。 例如:

 ...

 导入javax.xml.bind.annotation.XmlAccessType;
 导入javax.xml.bind.annotation.XmlAccessorType;
 导入javax.xml.bind.annotation.XmlElement;
 导入javax.xml.bind.annotation.XmlElementWrapper;
 导入javax.xml.bind.annotation.XmlRootElement;
 导入javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlRootElement(name =" MyCustomer",名称空间=" HybrisCommerceOData")
 公共类MyCustomerDto实现Serializable
 {
 专用静态最终长serialVersionUID = -3673480163872104417L;

 @XmlElement(名称=" CustomerNo",名称空间=" HybrisCommerceOData")
 私有字符串myCustomerNo;

 @XmlElement(名称=" FavouriteCompanyNo",名称空间=" HybrisCommerceOData")
 私人String favouriteCompany;

//getter&setters
 }
 

然后在您的Resource类中,例如 SomeOfferResource ,您需要添加 objectMapper 作为字段并在类构造函数中进行初始化。 然后,您可以使用所需的json格式的读/写方法。 参见下面的示例

//包

 导入javax.annotation.Resource;
 导入javax.ws.rs.GET;
 导入javax.ws.rs.POST;
 导入javax.ws.rs.Path;
 导入javax.ws.rs.PathParam;
 导入javax.ws.rs.Produces;
 导入javax.ws.rs.core.MediaType;
 导入javax.ws.rs.core.Response;

//其他进口

 @Path("/img/someoffers")
 @Produces({MediaType.APPLICATION_JSON})
 公共类SomeOfferResource扩展AbstractCollectionResource >

//一些字段

 私有最终ObjectMapper objectMapper;

 公共SomeOfferResource()
 {
 super(" SomeOffer");

 objectMapper = new ObjectMapper();
 objectMapper.registerModule(new JaxbAnnotationModule());
 objectMapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
 objectMapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
 }

//获取和发布方法的示例

 @POST
 @Path("/img/SomeOfferUsed/{someId}")
 公共响应someOfferUsed(@PathParam(" someId")最终字符串someId,最终字符串请求)
 {
//一些代码

 最后的SomeOfferUsedDto offerUsed = objectMapper.readValue(request,SomeOfferUsedDto.class);

//一些代码
 }

 @得到
 @Path("/img/SomePoint/{someId}")
 公共响应getSomePoints(@PathParam(" someId")最终字符串someId)
 {
//一些代码

 最终字符串jsonString = objectMapper.writeValueAsString(responseObject);
 返回Response.ok(jsonString).build();
 } 

希望这会有所帮助。

伊戈尔。

Climb_Ma
2楼-- · 2020-08-27 12:41

嗨伊戈尔。

首先,谢谢您的帮助。

我有同样的问题。

我创建了一个新扩展来测试为什么无法正确解析属性。

这是我的json

我的dto注释

还有我收到杂讯的方式。

没有收到attr白色蛇皮案,但是是attr白色骆驼案。

因此反序列化无法正常工作,但是要在转换属性后添加注释名称。

谢谢

一周热门 更多>