【问题标题】:Migrating @ResponseBody to ResponseEntity将 @ResponseBody 迁移到 ResponseEntity
【发布时间】:2017-12-11 16:01:51
【问题描述】:

我有一个旧控制器,其方法以 json 形式返回对象并用 @ResponseBody 标记。

问题是状态码总是 200,虽然有时不是。

当前的方法签名是:

public MyResponse myMethod(){}

我想把它改成:

public ResponseEntity<MyResponse> myMethod(){}

所有这些都不是问题,但我担心使用此控制器的客户端将无法解析响应。那可能吗? Spring 会用另一个对象包装响应吗?

【问题讨论】:

  • 不,它没有。响应将是相同的。
  • 没有。客户不会有任何问题

标签: java spring response spring-restcontroller


【解决方案1】:

根据@RequestMapping (https://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html) 的javadoc,ResponseEntity 的主体将被解包并写入响应输出流。所以输出应该是一样的。

当前版本 (https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-return-types) 的文档说的基本相同。

【讨论】:

  • 这仍然是正确的,但您引用的是近十年前的文档。
  • 在这种情况下,我们能否更新答案以将链接更改为最新版本的文档? (docs.spring.io/spring/docs/current/javadoc-api/org/…)
  • @RequestMapping 的当前 javadoc 没有提到 ResponseEntity
【解决方案2】:

如果无异常执行,Controller 将返回 http 200。 如果您使用HttpStatus.OK 返回 ResponseEntity 对象,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-06
    • 2014-05-08
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2020-10-11
    相关资源
    最近更新 更多