【问题标题】:Spring @RestController won't product application/xmlSpring @RestController 不会产生应用程序/xml
【发布时间】:2017-11-10 06:36:15
【问题描述】:

我有一个@RestController,方法如下

@RequestMapping(path = "/thing", method = RequestMethod.GET, 
    produces = { MediaType.APPLICATION_XML_VALUE })
public List<Thing> listThings() {
    return thingMapper.listThings();
}

但是当我在标头中使用 Accept:application/xml 发出 GET 请求时,响应的 Content-Length 为 0 并且它不会产生任何内容。我知道我的查询正在返回数据,如果我删除produces 属性并发出一个普通的get 请求,它会以json 形式返回数据......我只是无法让它生成xml。有什么想法吗?

编辑:我应该提到我正在使用 Spring Boot web starter

【问题讨论】:

  • 因为@ResponseBody 注解注入了RestController,你没有得到xml。参考stackoverflow.com/questions/4856298/…
  • @harshavmb 需要详细说明吗?我并没有真正关注您发布的问题。我在我的方法中添加了@ResponseBody,但结果是一样的
  • 单独添加 @ResponseBody 是行不通的。您需要有一些 xml 解析器来编组和解组 Java 对象。 Mike 的回答也或多或少与此相关,但他有 Jackson xml 解析器。现在清除吗?

标签: java xml spring http spring-boot


【解决方案1】:

如果您有 Jackson XML 扩展 (jackson-dataformat-xml) 类路径,它将用于呈现 XML 响应,并且非常相同 我们用于 JSON 的示例将起作用。要使用它,请添加以下内容 对您的项目的依赖:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

here

【讨论】:

  • 这使它工作,我什至不需要produces 属性或@ResponseBody 注释。但是,我觉得 Spring Boot Web 启动器应该完全具备处理 xml 响应的能力,而无需额外的依赖,所以我将暂缓将其标记为接受的答案
  • 我的意思是,除非您想节省我的时间并解释为什么实际上需要这种依赖关系,并且如果没有它,spring boot web starter 就无法做到这一点?
  • 你不需要 '@ResponseBody' 因为 '@RestController' 有。
  • 原因很简单,他们有带有 @ResponseBody 注释的 Jackson json 解析器。 Jackson 是 OOTB spring-rest 模块附带的默认 json 解析器。我分享的链接中提到了。很高兴知道这个问题已经解决了..?
  • 顺便说一句,我在 SO 上发现了一个错误。将标记!
猜你喜欢
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多