Как изменить тип содержимого в обработчике исключений
Предположим, у меня есть контроллер, который служитGET
запрашивает и возвращает bean-компонент для сериализации в JSON, а также предоставляет обработчик исключений дляIllegalArgumentException
что можно поднять в сервисе:
@RequestMapping(value = "/meta/{itemId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public MetaInformation getMetaInformation(@PathVariable int itemId) {
return myService.getMetaInformation(itemId);
}
@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ResponseBody
public String handleIllegalArgumentException(IllegalArgumentException ex) {
return ExceptionUtils.getStackTrace(ex);
}
Конверторы сообщений:
Теперь, когда я запрашиваю указанный URL в браузере, я вижу правильный ответ JSON. Однако, если возникает исключение, строковое исключение также преобразуется в JSON, но я бы хотел, чтобы его обрабатывалStringHttpMessageConverter
(в результатеtext/plain
тип пантомимы). Как я могу это сделать?
Чтобы сделать изображение более полным (и сложным), предположим, что у меня также есть следующий обработчик:
@RequestMapping(value = "/version", method = RequestMethod.GET)
@ResponseBody
public String getApplicationVersion() {
return "1.0.12";
}
Этот обработчик позволяет возвращать строку, возвращаемуюMappingJackson2HttpMessageConverter
а такжеStringHttpMessageConverter
в зависимости от пройденногоAccept-type
клиентом. Возвращаемые типы и значения должны быть следующими:
+----+---------------------+-----------------------+------------------+-------------------------------------+ | NN | URL | Accept-type | Content-type | Message converter | | | | request header | response header | | +----+---------------------+-----------------------+------------------+-------------------------------------+ | 1. | /version | text/html; */* | text/plain | StringHttpMessageConverter | | 2. | /version | application/json; */* | application/json | MappingJackson2HttpMessageConverter | | 3. | /meta/1 | text/html; */* | application/json | MappingJackson2HttpMessageConverter | | 4. | /meta/1 | application/json; */* | application/json | MappingJackson2HttpMessageConverter | | 5. | /meta/0 (exception) | text/html; */* | text/plain | StringHttpMessageConverter | | 6. | /meta/0 (exception) | application/json; */* | text/plain | StringHttpMessageConverter | +----+---------------------+-----------------------+------------------+-------------------------------------+