我已在服务器上部署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>
答案 0 :(得分:2)
您需要从reason
中删除@ResponseStatus
。
这是必要的,因为我们可以看到@ResponseStatus
的{{1}}:
用于响应的原因。
如果未设置此元素, 它将默认为状态代码的标准状态消息。 请注意,由于使用了{@code HttpServletResponse.sendError(int, 字符串)},响应将被视为完整,不应该 写得更进一步。