如何在Spring中向REST响应添加子状态(错误代码)?

时间:2015-06-20 13:38:10

标签: java spring rest

我在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);
   }
}

0 个答案:

没有答案