我在RESTful应用程序中使用Spring,并在拒绝访问时抛出一些HTTP 401异常。
基本上,我只是抛出一个或多个注释的例外:
@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
返回的内容如下:
{
"timestamp": 1434805699008,
"status": 401,
"error": "Unauthorized",
"message": "[ERR:02-011] Access to '/user/account/{id}' is rejected!",
"path": "/user/account/{id}"
}
问题是抛出HTTP 401有很多次原因,例如API-KEY格式错误,API-KEY无效(非十六进制,太短,太长),API-KEY已过期等。
我希望客户端能够解析这样的子状态。我希望能够收到这样的信息:
{
"timestamp": 1434805699008,
"status": 401,
"code": 12011,
"error": "Unauthorized",
"message": "[ERR:12-011] Access to '/user/account/{id}' is rejected!",
"path": "/user/account/{id}"
}
哪里会有" code
"可以由客户消费的财产。我不想诉诸解析我的" [ERR:02-011]"等字符串消息。这是不好的做法。
我尝试使用AbstractWebException
扩展我的所有异常,其中code
变量具有正确的getter和setter方法。但这似乎并没有最终被其他异常序列化(不太清楚为什么)。
我想保持简单!
感谢您的任何建议和帮助。
一些代码:
public abstract class AbstractWebException extends RuntimeException {
private static final long serialVersionUID = 1L;
private int errorCode = 0;
public AbstractWebException(String message) {
super(message);
}
public AbstractWebException(int errorCode, String message) {
super(message);
setErrorCode(errorCode);
}
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
public int getErrorCode() {
return errorCode;
}
}
......和......
/**
* <b>HTTP 401 - Unauthorized</b>
*/
@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
public class UnauthorizedException extends AbstractWebException {
private static final long serialVersionUID = 1L;
public UnauthorizedException(String message) {
super(message);
}
}