我正在编写基于REST的Web服务。我需要以JSON格式返回所有响应。我有一个拦截器来验证我的身份验证参数。在身份验证失败的情况下,我必须以JSON格式返回错误响应。
目前我在做
response.setHeader( “内容类型”, “应用/ JSON”); response.sendError(HttpServletResponse.SC_UNAUTHORIZED,“{\”error \“:\”缺少身份验证参数\“}”);
响应机构如下:
JBoss Web / 2.1.3.GA - 错误报告
类型状态报告
消息 {“错误”:“缺少身份验证参数”}
说明此请求需要HTTP身份验证( {“error”:“缺少身份验证参数”})。
我只需要响应中的JSON字符串。请帮帮我。
答案 0 :(得分:1)
你可能应该使用spring-security。如果您想手动执行此操作,则在响应中使用sendError
的替代方法是使用spring MVC的@ExceptionHandler和content negotiation来返回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
捕获它并返回包含ResponseEntity
实例的Error
和相应的错误代码。
@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惯例之神