java对象转xml的问题 用的是jackson-dataformat-xml.jar

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java对象转xml的问题 用的是jackson-dataformat-xml.jar相关的知识,希望对你有一定的参考价值。

pojo:

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;

/**
* 文本消息
*/
@JacksonXmlRootElement(localName="xml")
public class TextMessage extends WeiXinRespMsg
// 回复的消息内容
@JacksonXmlProperty(localName="Content")
private String Content;
//getter、setter省略


public class test
public static void main(String[] args) throws Exception
TextMessage t = new TextMessage();
t.setContent("内容地方1111");
ObjectMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(textMessage);
System.out.println(xml);


运行后输出:
<xml xmlns="">
<content>内容地方1111</content>
<Content>内容地方1111</Content>
</xml>
我需要的是:
<xml xmlns="">
<Content>内容地方1111</Content>
</xml>
哪位大侠懂,请帮帮忙……
我需要的是:
<xml>
<Content>内容地方1111</Content>
</xml>

参考技术A string转xml。再xml解析获得Content节点数据。 参考技术B 看看是不是注解写错了,你的getter和setter上面是不是也写了注解?

java对象转json JsonFormat注解 get方法

写在前面,首先,我用的java转json序列化的工具是java开源的jackson。

今天在做后端接口的时候,发现获取的json对象中少了几个属性,因为其他的接口都能得到正确的json,所以很快就找到了问题所在,先上代码

public class ChargeDto implements Serializable {
    private static final long serialVersionUID = -4617215025083571608L;
    protected Integer cId;
    protected String Item;
    protected Double Amount;
    protected Integer Vcid;
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    protected Date CreateTime;
    protected String CreateEName;
}
{
  "status": 200,
  "message": "成功",
  "data": [
    {
      "CreateTime": "2020-05-04 01:41:19"
    },
    {
      "CreateTime": "2020-05-04 02:10:11"
    }]
}

是的,这里我的类中只有属性,没有getter、setter方法,所以获取的json中少了一些属性。

解决方法一:后来我将类中的所有属性加上了getter、setter方法之后得到了正确的json对象。

{
  "status": 200,
  "message": "成功",
  "data": [
    {
      "cId": 1,
      "item": "挂号",
      "createEName": "医生1",
      "createTime": "2020-05-04 01:41:19",
      "amount": 5,
      "vcid": 1
    },
    {
      "cId": 2,
      "CreateTime": "2020-41-04 01:41:38",
      "item": "处方结算",
      "createEName": "医生1",
      "createTime": "2020-05-04 02:10:11",
      "amount": 122,
      "vcid": 1
    }]
}

虽然很快解决了,但是我还是上网查了下原因,然后我查阅知晓对于我用的jackson来说,需要类中有getter方法。是的,虽然我一次性把Setter方法也加上了,但是对于jackson将java对象转json来说,只要有Getter方法就行了。甚至是不需要有属性!

注意:java对象转成json成立的基本条件只需要有get方法!!

三种常见的json jar序列化与set,get方法的关系

然后我发现我一开始虽然丢失了几个属性,但是我也是有属性转为了json的,就是CreateTime。于是我就注意到了我在CreateTime属性上加的注解@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss"),我想着是不是和这个注解有关,于是我将Getter方法删去,在其他属性上加上了注解

public class ChargeDto implements Serializable {
    private static final long serialVersionUID = -4617215025083571608L;
    protected Integer cId;
    protected String Item;
    @JsonFormat
    protected Double Amount;
    @JsonFormat
    protected Integer Vcid;
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    protected Date CreateTime;
    protected String CreateEName;
}

然后在json中成功都得到了该属性,

{
  "status": 200,
  "message": "成功",
  "data": [
    {
      "Amount": 5,
      "Vcid": 1,
      "CreateTime": "2020-04-04 01:41:19"
    },
    {
      "Amount": 122,
      "Vcid": 1,
      "CreateTime": "2020-04-04 01:41:38"
    }]
}

所以,解决方法二:在你需要转为json的属性上加上@JsonFormat注解即可

这其中的具体原理我并没有去深究,之后有时间再去看看具体源码。如果有大佬都懂的话可以留言指导,或者留下博客链接,小弟必去造访。


以上都是本人自己的理解,可能会与真正的解答不一致,欢迎各位大佬指正。

以上是关于java对象转xml的问题 用的是jackson-dataformat-xml.jar的主要内容,如果未能解决你的问题,请参考以下文章

java对象转json JsonFormat注解 get方法

jackson 进行json与java对象转换 之四

jackson实现java对象转支付宝/微信模板消息

Jackson 学习笔记 XML转JSON

Jackson 学习笔记 XML转JSON

springmvc json转对象时日期转化