欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring mvc 返回xml格式数据

程序员文章站 2022-03-17 11:45:26
1.问题 : 因为业务需要,需要发送xml格式的数据,使用spring mvc 自己解析,就不用费心去自己搞这些东西. 2.解决: 新建一个实体类,直接在实体类中添加注解即可,如下: 类上方添加: @XmlRootElement@XmlAccessorType(XmlAccessType.FIELD ......

1.问题 : 因为业务需要,需要发送xml格式的数据,使用spring mvc 自己解析,就不用费心去自己搞这些东西.

2.解决:

新建一个实体类,直接在实体类中添加注解即可,如下:

@xmlrootelement
@xmlaccessortype(xmlaccesstype.field)
public class xmltestbean {
    @xmlelement
    @xmlcdata
    private string username;
    @xmlelement
    private string password;
    @xmlelement
    private string name;
    
    public string getusername() {
        return username;
    }
    public void setusername(string username) {
        this.username = username;
    }
    public string getpassword() {
        return password;
    }
    public void setpassword(string password) {
        this.password = password;
    }
    public string getname() {
        return name;
    }
    public void setname(string name) {
        this.name = name;
    }
    @override
    public string tostring() {
        return "xmltestbean [username=" + username + ", password=" + password + ", name=" + name + "]";
    }
    
    
}

类上方添加:

@xmlrootelement
@xmlaccessortype(xmlaccesstype.field)

字段名添加:

@xmlelement

在controller类中返回即可:

@controller
@requestmapping("test")
public class testcontroller {
    
    @requestmapping("xml")
    @responsebody
    public xmltestbean gettestxml(){
        xmltestbean xml = new xmltestbean();
        xml.setusername("aa");
        xml.setpassword("bb");
        xml.setname("cc");
        return xml;
    }
    @requestmapping("getxml")
    public void getxml(@requestbody xmltestbean xml){
        system.out.println(xml);
    }
    

}

结果:

<?xml version="1.0" encoding="utf-8"?>
<xmltestbean>
    <username>
        <![cdata[aa]]>
    </username>
    <password>bb</password>
    <name>cc</name>
</xmltestbean>

 

补充:@xmlcdata注解的作用:可以让返回值中添加

<![cdata[]]>

 cdata 区段,可以不被xml解析器解析,但是需要在pom.xml添加

<dependency>
    <groupid>org.eclipse.persistence</groupid>
    <artifactid>eclipselink</artifactid>
    <version>2.5.0</version>
</dependency>

和在实体类的包下添加jaxb.properties文件,文件内容如下:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.jaxbcontextfactory

 

只是解决了问题,但是原理这些还不懂,σ( ° △ °|||)︴,有机会再搞懂原理吧