spring boot2 (36)-xml数据的请求和响应、XmlMapper转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangb_java/article/details/78392391

虽然现在已经是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);

猜你喜欢

转载自blog.csdn.net/wangb_java/article/details/78392391