虽然现在已经是json的天下,但是仍然有一些厂商接口要求xml格式。本篇将介绍如何接收和响应及转换xml格式。
pom.xml
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
接收xml
添加以上依赖之后,spring boot会自动进行配置,之后用@RequestBody即可将请求的xml数据映射到其参数比如map中。注意:此时@RequestBody可以同时识别xml或json参数,并进行相应的解析,因为在请求时会设置body参数类型。
@PostMapping(value="/xml")
public Object handler(@RequestBody Map<String,String> map)
以下是postman的请求方式,注意body类型要设置为application/xml
响应xml
@GetMapping(value="/test")
public Object test() {
Map xml = new HashMap();
xml.put("key1", "value1");
xml.put("key2", "value2");
return xml;
使用浏览器请求,可看到以下xml响应结果。
配置标签名
上面的标签名是根据类名和相关参数名生成的,如果想设置成自己想要的名字,可以自己创建一个类,替代上面的map
@JacksonXmlRootElement(localName = "xml") //根标签名
public class User {
@JacksonXmlProperty(localName = "Id") //id标签名
private String id;
@JacksonXmlProperty(localName = "Name") //name标签名
private String name;
//省略get/set
创建这个类的实例,给其参数赋值id=1,name=tom,将其作为方法返回值,结果如下
兼容json响应类型
现在默认响应类型变成了xml,此时如果要响应json类型,有两种方法可选:
1.配置mapping的produces参数,也可直接在类上面配置,对所有方法生效。
@GetMapping(value="/test",produces="application/json")
2.配置全局参数,扩展url后缀路径,请求时url后缀 .json表示json类型。.xml表示xml类型。
spring.mvc.contentnegotiation.favor-path-extension=true
spring.mvc.pathmatch.use-registered-suffix-pattern=true
此时请求http://localhost:8080/test.json 如下
XmlMapper实现xml和java对象互转
第30篇讲过ObjectMapper,用于json和对象的互转。XmlMapper是它的子类,用于xml和对象的互转,用法一样。
User user = new User();
user.setId("1");
user.setName("tom");
//创建xmlMapper对象
XmlMapper xmlMapper = new XmlMapper();
//对象转xml字符串
String xml = xmlMapper.writeValueAsString(user);
//xml转对象
User u = xmlMapper.readValue(xml, User.class);