SpringBoot2+Gradle项目中接口使用xml格式作为数据传递遇到的一些问题

336 阅读1分钟

本人项目使用的gradle管理的依赖,遇到依赖加载不到的问题

compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-xml'

以上是正确的依赖注入使用,

compile

编译范围依赖在所有的 classpath 中可用,同时它们也会被打包

错误演示:

implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-xml'

此处只是执行,是加载不到依赖的,调用不到api

注意该依赖加入后,默认header中使用的Content-Type是application/xml;charset=utf-8

所以需要使用http请求其他外部接口时,需要使用到json格式,务必在header中将Content-Type设置为application/json

controller中的方法处的添加方法

@PostMapping(value = "",        
        consumes = MediaType.APPLICATION_XML_VALUE,        
        produces = MediaType.APPLICATION_XML_VALUE)

实体类中的注解使用

@JacksonXmlRootElement(localName = "response")

该注解是加在实体类上面的,代表的意思是跟节点

@JacksonXmlProperty(localName = "result")

该注解是加载属性上的,代表的意思是单个xml节点的映射

关于注解遇到的现象有二出现了一个实体类中的集合属性出现两次节点的奇怪现象@JacksonXmlElementWrapper(useWrapping=false)

//例如这种的
@JacksonXmlProperty(localName = "archives")
private List<ArchivesSon> archives;
这种情况会xml出现一种问题
<archives>
    <archives>    <archives/><archives/>但是我们只需要其中的一层可以这么写
@JacksonXmlElementWrapper(useWrapping=false)
@JacksonXmlProperty(localName = "archives")
private List<ArchivesSon> archives;@JacksonXmlElementWrapper(useWrapping=false)这个注解的意思是让第一行空着

出现了xml中重复出现一个节点的现象,出现了两次,个别节点@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)

比如:

这种情况的出现,解决方法:在该实体类上增加@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)

这个注解可解决这个问题