在Spring MVC中,可以通过注解@RequestBody直接将输入的XML字符串转为Java对象,其底层实际上是通过JAXB来实现的。JAXB直接包含在JDK中,通过Demo了解使用:
在Bean中,不需要设置getter和setter方法,直接利用XmlRootElement注解设置根节点名称,再利用XmlElement设置子节点名称即可。
注意,不要加入setter和getter,这样会使节点重复设置,如果我们要设置属性的话,可以通过Builder模式。
@XmlRootElement(name = "xml")
public class RealSubject {
@XmlElement(name = "Number")
private String Number = "3";
@XmlElement(name = "ID")
private String Id;
public static class Builder{
private String Number;
private String ID;
public Builder setID(String ID) {
this.ID = ID;
return this;
}
public Builder setNumber(String Number) {
this.Number = Number;
return this;
}
public RealSubject build() {
RealSubject realSubject = new RealSubject();
realSubject.Id = ID;
realSubject.Number = Number;
return realSubject;
}
}
}
利用JDK中的JAXB来进行序列化和反序列化如下:
public class Solution {
public static void main(String[] args) throws JAXBException {
String xmlInput = "<xml><Number>3</Number></xml>";
JAXBContext jc = JAXBContext.newInstance(RealSubject.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
RealSubject realSubject = (RealSubject) unmarshaller.unmarshal(new StringReader(xmlInput));
Marshaller ms = jc.createMarshaller();
ms.marshal(realSubject,System.out);
System.out.println(realSubject);
}
}
在SpringMVC的Controller中,实际上框架为我们自动调用了上述方法,所以使用的时候我们直接在Bean文件中写出相应注释即可。