Um Griff-Fehler (wie HTTP 404 ist) global, die außerhalb eines Controllers auftreten, kann ich Einträge haben ähnlich der folgenden in meiner web.xml:Spring MVC 3.2 - Content Negotiation für Fehlerseiten?
<error-page>
<error-code>404</error-code>
<location>/errors/404</location>
</error-page>
In meinem Errorcontroller ich ähnliche entsprechende Verfahren müssen die folgende:
@Controller
@RequestMapping("/errors")
public class ErrorController {
@RequestMapping(value = "/404", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<ErrorResponse> error404() {
ErrorResponse errorBody = new ErrorResponse(404, "Resource Not Found!");
return new ResponseEntity<ErrorResponse>(errorBody, HttpStatus.NOT_FOUND);
}
}
Das Problem, das ich bin Bewurf ist, dass die ContentNegotiationManager
und Nachrichtenwandler I konfiguriert haben, werden in diesem Fall nicht verwendet werden. Ich vermute, dass, da die Anfrage auf die Fehlerseite umgeleitet wird, die Attribute der ursprünglichen Anfrage verloren gehen, die bei der Inhaltsverhandlung verwendet werden, und dies wird als eine vollständig separate Anfrage behandelt. (dh ursprüngliche Anfrage für /mycontroller/badresource.json ->/errors/404 (mit keiner Dateierweiterung))
Gibt es einen Weg in einem Fehlerhandler wie diesem festzustellen und/oder mit dem entsprechenden Inhaltstyp zu antworten wie in der ursprünglichen Anfrage gefordert?
Vielen Dank für die Eingabe. Ich habe diesen Artikel gesehen, aber wenn ich etwas nicht vermisse, behandelt es nur Ausnahmen von den Controllern und nicht allgemeine Servlet-Fehler. In diesem Kontext gibt 'request.getRequestURI()' außerdem den URI der Fehlerseite. Sieht so aus, als müssten Sie 'req.getAttribute (" javax.servlet.error.request_uri ")' verwenden, um den URI der ursprünglichen Anfrage zu erhalten.Ich frage mich, ob es eine Möglichkeit gibt, die Informationen, die der ContentNegotiationManager verwendet, zu überschreiben und sie auf die Informationen aus der ursprünglichen Anfrage anstatt auf der Fehlerseite zu setzen? – WayneC