2014-02-20 6 views
5

Ich verwende Spring MVC 3.2 @RequestMapping und @ResponseBody als REST-Service. Ein Beispiel Endpunkt sieht wie folgt aus:Deaktivieren der Standardfehlerseite in Tomcat für Spring MVC REST API

@RequestMapping(value = "query", method = RequestMethod.GET) 
@ResponseBody 
public Locations searchHandler(@RequestParam String q, HttpServletRequest request,  HttpServletResponse response) { 
... 

eine falsche Anforderung für nicht vorhandene Endpunkte Senden oder GET-Parameter q fehlt die Tomcat 7 Fehlerbericht anzeigen:

<html> 
    <head> 
     <title>Apache Tomcat/7.0.50 - Error report</title> 
     <style> 
      <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--> 
     </style> 
    </head> 
    <body> 
     <h1>HTTP Status 404 - </h1> 
     <HR size="1" noshade="noshade"> 
      <p> 
       <b>type</b> Status report 
      </p> 
      <p> 
       <b>message</b> 
       <u></u> 
      </p> 
      <p> 
       <b>description</b> 
       <u>The requested resource is not available.</u> 
      </p> 
      <HR size="1" noshade="noshade"> 
       <h3>Apache Tomcat/7.0.50</h3> 
      </body> 
     </html> 

Wie kann ich diese Fehlerseite deaktivieren. Ich möchte nur die Fehlermeldung als Inhalt ohne HTML oder weitere Informationen.

Antwort

3

Ok, ich habe die Lösung gefunden. Ich implementierte einen Exception-Handler, wie oben in dem Link beschrieben:

@ControllerAdvice 
public class ErrorController { 

    /** 
    * . 
    * @param request . 
    * @param response . 
    * @throws Exception . 
    */ 
    @ExceptionHandler(Exception.class) 
    public void handleConflict(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception { 
     // If the exception is annotated with @ResponseStatus rethrow it and let 
     // the framework handle it - like the OrderNotFoundException example 
     // at the start of this post. 
     // AnnotationUtils is a Spring Framework utility class. 
     if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) { 
      throw e; 
     } 

     response.setStatus(400); 
     response.getWriter().println(e.getMessage()); 
    } 
} 

Sein wichtiges response.getWriter() zu verwenden ... statt mit response.sendError().