无法从@ExceptionHalndler方法接收响应数据

时间:2014-05-27 09:50:49

标签: spring rest spring-mvc

我已在服务器上部署Restful Web Serivce并从客户端应用程序访问它。

我正在使用JSON在服务和服务之间传递数据。客户端。

正常流程正常运作。

但是,在Exception的情况下,我能够收到HTTP状态&异常但不接收响应主体的原因。

这是我的异常处理程序

@ExceptionHandler(MyException.class)
@ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR,reason="Unable to fetch data")      

public @ResponseBody String handle(MyException ex)

    {
        ErrorInfo error = new ErrorInfo();   
        String response = null;
        error.setErrorStatus(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR));  
        error.setErrorCode(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR));   // TODO Need to store Application specific error code
        error.setErrorMessage("Communication Error : Unable to fetch conference data");                  // TODO Need to get from message resource file
        error.setDeveloperMessage(ex.getLocalizedMessage());


        response = utilities.fromBeanToJson(error);
        System.out.println("***Response : " + response);
        return response;   // Not able to receive this info
    }

实际回应:

<html><head><title>Apache Tomcat/6.0.29 - 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 500 - Unable to fetch conference data</h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u>Unable to fetch data</u></p><p><b>description</b> <u>The server encountered an internal error (Unable to fetch data) that prevented it from fulfilling this request.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/6.0.29</h3></body></html>

1 个答案:

答案 0 :(得分:2)

您需要从reason中删除@ResponseStatus。 这是必要的,因为我们可以看到@ResponseStatus的{​​{1}}:

  

用于响应的原因。

如果未设置此元素,   它将默认为状态代码的标准状态消息。   请注意,由于使用了{@code HttpServletResponse.sendError(int,   字符串)},响应将被视为完整,不应该   写得更进一步。