2016-04-08 5 views
2

У меня есть контроллер, аннотированный как @RestController, поэтому он автоматически добавляет @ResponseBody ко всем методам, аннотированным с помощью @RequestMapping. Но если я использую @ExceptionHandler аннотацию и вернуть некоторый ответ:Spring ExceptionHandler в RestController

@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.

Смежные вопросы