2016-04-08 137 views
2

我有一個註釋爲@RestController的控制器,因此它會自動將@ResponseBody添加到@RequestMapping註釋的所有方法中。但是,如果使用@ExceptionHandler註釋和一些響應:RestController中的Spring異常處理程序

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

我可以從處理程序中移除@ResponseBody?如果我使用@ControllerAdvice是否可以從其處理程序中刪除@ResponseBody註釋?

回答

2

從Spring 4.0開始,@ResponseBody註釋也可以在類型級別上添加,在這種情況下,它是繼承的,不需要在方法級別上添加。因此,如果您在上使用@ResponseBody類型級別,您確實需要在@RequestMapping s和ExceptionHandler s上使用而不是

我可以從處理程序中刪除@ResponseBody嗎?

@RestController是一個刻板印記,它結合了@ResponseBody@Controller。所以,是的,您可以刪除它,因爲@RestContorller在類型級別上添加@ResponseBody

如果我使用@ControllerAdvice是否可以從它的處理程序中刪除@ResponseBody 註釋?

不,您不能這樣做,除非您在類型級別添加ResponseBody

在這兩種情況下,如果您返回ResponseEntity的實例作爲返回值,則不需要ResponseBody