我有一个注释为@RestController
的控制器,因此它会自动将@ResponseBody
添加到所有使用@RequestMapping
注释的方法中。但是,如果我使用@ExceptionHandler
注释并返回一些响应:
@ExceptionHandler
public @ResponseBody Response someHandler(Exception ex) { ... }
我可以从处理程序中删除@ResponseBody
吗?如果我使用@ControllerAdvice
,是否可以从其处理程序中删除@ResponseBody
注释?
答案 0 :(得分:2)
从Spring 4.0开始,-O2
注释也可以添加到类型级别,在这种情况下它是继承的,不需要在方法级别上添加。因此,如果您在类型级别上使用@ResponseBody
,则不需要在@ResponseBody
和@RequestMapping
上使用它。
我可以从处理程序中删除@ResponseBody吗?
ExceptionHandler
是一种结合了@RestController
和@ResponseBody
的刻板印象注释。所以,是的,您可以将其删除,因为@Controller
在类型级别添加了@RestContorller
。
如果我使用@ControllerAdvice,则可以删除@ResponseBody 来自它的处理程序的注释?
不,除非您在类型级别添加@ResponseBody
,否则不能在此处执行此操作。
在这两种情况下,如果您返回ResponseBody
的实例作为返回值,则不需要ResponseEntity
。