RestController中的Spring ExceptionHandler

时间:2016-04-08 10:40:18

标签: java spring spring-mvc

我有一个注释为@RestController的控制器,因此它会自动将@ResponseBody添加到所有使用@RequestMapping注释的方法中。但是,如果我使用@ExceptionHandler注释并返回一些响应:

@ExceptionHandler
public @ResponseBody Response someHandler(Exception ex) { ... }

我可以从处理程序中删除@ResponseBody吗?如果我使用@ControllerAdvice,是否可以从其处理程序中删除@ResponseBody注释?

1 个答案:

答案 0 :(得分:2)

从Spring 4.0开始,-O2注释也可以添加到类型级别,在这种情况下它是继承的,不需要在方法级别上添加。因此,如果您在类型级别上使用@ResponseBody,则需要在@ResponseBody@RequestMapping上使用它。

  

我可以从处理程序中删除@ResponseBody吗?

ExceptionHandler是一种结合了@RestController@ResponseBody的刻板印象注释。所以,是的,您可以将其删除,因为@Controller在类型级别添加了@RestContorller

  

如果我使用@ControllerAdvice,则可以删除@ResponseBody   来自它的处理程序的注释?

不,除非您在类型级别添加@ResponseBody,否则不能在此处执行此操作。

在这两种情况下,如果您返回ResponseBody的实例作为返回值,则不需要ResponseEntity