![](/img/trans.png)
[英]Spring MVC Interceptor error response not caught by Tomcat custom error handler
[英]Error response in json format for Spring interceptor
我正在编写一个基于REST的Web服务。 我需要以JSON格式返回所有响应。 我有一个拦截器来验证我的身份验证参数。 在身份验证失败的情况下,我必须以JSON格式返回错误响应。
目前我在做
response.setHeader(“ Content-Type”,“ application / json”); response.sendError(HttpServletResponse.SC_UNAUTHORIZED,“ {\\”错误\\“:\\”缺少身份验证参数\\“}”“);
响应主体如下。
JBoss Web / 2.1.3.GA-错误报告
类型状态报告
消息 {“错误”:“缺少身份验证参数”}
说明此请求需要HTTP身份验证({“错误”:“缺少身份验证参数”})。
我只需要JSON字符串作为响应。 请帮我。
您可能应该为此使用spring-security。 如果您想手动执行此操作,则在响应上使用sendError
的替代方法是使用spring MVC的@ExceptionHandler以及内容协商来返回JSON。
首先定义一个错误类别*:
public class Error {
public message;
public exception;
public Error(String message, Exception ex) {
this.message = message;
this.exception = ex;
}
}
还有一个例外:
public class NotAuthenticatedException extends Exception {
// ...
}
然后,在您的控制器中,在适当的时间引发异常,使用@ExceptionHandler
捕获该异常,并返回包含Error
实例和适当的错误代码的ResponseEntity
。
@Controller
public class SimpleController {
@RequestMapping(...)
public String aMethod() {
// ...
throw new NotAuthenticatedException("Missing Authentication Parameters");
}
@ExceptionHandler(NotAuthenticatedException.class)
public ResponseEntity<Error> handleNotAuthenticatedException(
NotAuthenticatedException ex,
HttpServletRequest request) {
return new ResponseEntity<Error>(
new Error(ex.getMessage(), ex),
HttpStatus.UNAUTHORIZED
);
}
}
*使用getters / setters来取悦Java惯例之神
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.