Spring-Boot-XML-Restful-Service

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-write-an-xml-rest-service

总体说明

1. 只需要在pom中引入相关的依赖,既可以自动实现XML格式数据输出.
2. 可能由于maven版本 java范本等问题 依赖项会有所不同

过程

2015年12月16日20:37:29

找到一篇博客 开始实验 因网速较慢不太顺利

2015年12月16日22:52:33

寻找到了sprint-boot的官方文档,
发现需要依赖jacson-dataformat-xml 在pom中添加了(2.7rc)
helloworld实验成功 可以输出User类json数据和xml数据

测试发现map格式的数据不能正常转换成功(建议结果都使用pojo格式)

public class Data {
private Map<String,Object> objectMap=new LinkedHashMap<String, Object>();
//...省略
}

出现错误:StartTag: invalid element name

尝试将jackson-dataformat-xml的版本改为更低的版本
发现不能正常转换
报错:No converter found for return value of type:
如果添加@XmlRootElement 注解则Pojo类能正常转换

map或map的包装类报错
SAXException2: class com.sishuok.entity.User以及其任何超类对此上下文都是未知的。

2015年12月16日23:57:34

如果map中的对象是一个具体的类则使用@XmlRootElement能够转换成功,
否则仍出现错误 StartTag: invalid element name

public class Data {
private Map<String,User> objectMap=new LinkedHashMap<String, User>();
//...省略
}

测试如果是list<User>的情况 jackson也可正常转换
list<Object>的情况下 如果Object的实例为Pojo也可以正常转换

成功示例

例子代码
User是一个Pojo类 无需任何注解等

public class User implements Serializable {
private Long id;
private String name;

//...省略
}

Contoller是一个普通的RestController也不需要任何特殊代码

@RestController
@RequestMapping("/user")
public class UserController {

@RequestMapping("/{id}")
private User view(@PathVariable("id") Long id) {
User user = new User();
user.setId(id);
user.setName("zhang");
return user;
}

}

需要依赖如下包


com.fasterxml.jackson.dataformat
jackson-dataformat-xml

下面这个包不是必须的(对xml处理的性能优化)


org.codehaus.woodstox
woodstox-core-asl

可能会出现Log4j实例创建错误,添加如下依赖可解决


ch.qos.logback
logback-core
1.1.3

maven-resources-plugin可能报错可添加如下plugin配置


org.apache.maven.plugins
maven-resources-plugin
2.6


org.sonatype.plexus
plexus-build-api
0.0.7


特定版本可能出现maven-clean-plugin的问题可以加入以下plugin配置


org.apache.maven.plugins
maven-clean-plugin
2.6

posted on 2015-12-16 20:40  laoniu85  阅读(709)  评论(0)    收藏  举报

导航