@RestController 与 ResponseEntity
@RestController with ResponseEntity
我知道 @RestController
实际上是 @Controller
加上 @ResponseBody
。但是,如果我将我的方法更改为 return ResponseEntity
,如下所示,使用 @RestController
在这里没有特殊任务要执行。
@GetMapping(value="/my-url")
public ResponseEntity<?> getSomething( @RequestParam(value = "id") String id){
//code here
}
如果 return 类型是 ResponseEntity
,那是否意味着 @RestController
和 @Controller
执行相同的任务。
如果是这样的话,为什么我看到很多例子仍然使用 @RestController
和 ResponseEntity
而不是简单地使用 @Controller
。我在这里遗漏了什么吗?
如果它只有 return ResponseEntity
的处理程序方法,那么用 @RestController
(而不是 @Controller
)注释你的控制器 class 是没有意义的。 =36=]
Spring MVC 的默认基础结构为每种不同的受支持 return 类型注册了一个 HandlerMethodReturnValueHandler
实现列表。例如,处理程序方法 returning ModelAndView
个对象有 ModelAndViewMethodReturnValueHandler
;方法 returning DeferredResult
或 ListenableFuture
有 DeferredResultMethodReturnValueHandler
; ViewNameMethodReturnValueHandler
方法 returning String
值意味着被解释为视图名称。
列表按顺序处理,并使用找到的第一个支持 return 值的处理程序。实现处理 ResponseEntity
、HttpEntityMethodProcessor
, is registered before the one handling @ResponseBody
, RequestResponseBodyMethodProcessor
。在某种意义上,@RestController
被相应的处理程序方法 returning ResponseEntity
.
忽略了
如果您的控制器 class 有其他处理程序方法 return 需要直接序列化的值,那么保留 @RestController
(而不是注释所有那些带有 @ResponseBody
的方法)。但是如果你所有的方法 return ResponseEntity
,那么它是不必要的并且可能会产生误导。
仅供参考,处理程序的默认列表是在 RequestMappingHandlerAdapter
. You can provide your own list by calling setReturnValueHandlers
中名为 getDefaultReturnValueHandlers()
的私有方法中生成的。
我知道 @RestController
实际上是 @Controller
加上 @ResponseBody
。但是,如果我将我的方法更改为 return ResponseEntity
,如下所示,使用 @RestController
在这里没有特殊任务要执行。
@GetMapping(value="/my-url")
public ResponseEntity<?> getSomething( @RequestParam(value = "id") String id){
//code here
}
如果 return 类型是 ResponseEntity
,那是否意味着 @RestController
和 @Controller
执行相同的任务。
如果是这样的话,为什么我看到很多例子仍然使用 @RestController
和 ResponseEntity
而不是简单地使用 @Controller
。我在这里遗漏了什么吗?
如果它只有 return ResponseEntity
的处理程序方法,那么用 @RestController
(而不是 @Controller
)注释你的控制器 class 是没有意义的。 =36=]
Spring MVC 的默认基础结构为每种不同的受支持 return 类型注册了一个 HandlerMethodReturnValueHandler
实现列表。例如,处理程序方法 returning ModelAndView
个对象有 ModelAndViewMethodReturnValueHandler
;方法 returning DeferredResult
或 ListenableFuture
有 DeferredResultMethodReturnValueHandler
; ViewNameMethodReturnValueHandler
方法 returning String
值意味着被解释为视图名称。
列表按顺序处理,并使用找到的第一个支持 return 值的处理程序。实现处理 ResponseEntity
、HttpEntityMethodProcessor
, is registered before the one handling @ResponseBody
, RequestResponseBodyMethodProcessor
。在某种意义上,@RestController
被相应的处理程序方法 returning ResponseEntity
.
如果您的控制器 class 有其他处理程序方法 return 需要直接序列化的值,那么保留 @RestController
(而不是注释所有那些带有 @ResponseBody
的方法)。但是如果你所有的方法 return ResponseEntity
,那么它是不必要的并且可能会产生误导。
仅供参考,处理程序的默认列表是在 RequestMappingHandlerAdapter
. You can provide your own list by calling setReturnValueHandlers
中名为 getDefaultReturnValueHandlers()
的私有方法中生成的。