2014-02-20 74 views
5

我使用Spring MVC 3.2 @RequestMapping和@ResponseBody作为REST服务。一个例子端点看起来是这样的:在Tomcat中禁用Spring MVC REST API的默认错误页面

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

发送对于不存在的端点一个错误的请求或缺少GET参数q将显示的Tomcat 7的错误报告:

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

如何禁用此错误页面。我只是想将错误消息作为内容而没有任何HTML或更多信息。

回答

3

好的,我找到了解决方案。我实现了一个异常处理程序在上面的链接描述:

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

其重要的使用response.getWriter()的......而不是使用response.sendError()。