Как изменить тип содержимого в обработчике исключений

Предположим, у меня есть контроллер, который служит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          |
+----+---------------------+-----------------------+------------------+-------------------------------------+

Ответы на вопрос(2)

Ваш ответ на вопрос