So ändern Sie den Inhaltstyp im Ausnahmehandler

Angenommen, ich habe einen Controller, der dientGET Request und Return Bean für die Serialisierung an JSON und bietet außerdem einen Exception-Handler fürIllegalArgumentException das kann im Dienst angehoben werden:

@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);
}

Nachrichtenkonverter sind:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
        <bean class="org.springframework.http.converter.StringHttpMessageConverter" />
    </mvc:message-converters>
</mvc:annotation-driven>

Wenn ich jetzt die angegebene URL im Browser anfordere, wird die richtige JSON-Antwort angezeigt. Wenn eine Ausnahme ausgelöst wird, wird die stringierte Ausnahme ebenfalls in JSON konvertiert, aber ich würde es lieben, wenn sie von verarbeitet wirdStringHttpMessageConverter (resultierendtext/plain Mime Typ). Wie kann ich es machen?

Nehmen wir an, ich habe auch den folgenden Handler, um das Bild vollständiger (und komplizierter) zu machen:

@RequestMapping(value = "/version", method = RequestMethod.GET)
@ResponseBody
public String getApplicationVersion() {
    return "1.0.12";
}

Mit diesem Handler kann die Rückgabezeichenfolge von beiden serialisiert werdenMappingJackson2HttpMessageConverter undStringHttpMessageConverter je nach bestandenAccept-type vom Kunden. Die Rückgabetypen und -werte sollten wie folgt lauten:

+----+---------------------+-----------------------+------------------+-------------------------------------+
| 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          |
+----+---------------------+-----------------------+------------------+-------------------------------------+

Antworten auf die Frage(2)

Ihre Antwort auf die Frage