具有状态代码的非泽西岛JAX-RS自定义异常

时间:2016-06-07 13:45:43

标签: java json web-services rest

我正在使用Apache Wink和JAX-RS,我正在努力为错误处理抛出自定义异常。我能够得到足够远的东西来发回带有状态代码的自定义JSON消息,但是我希望能够使用这个自定义异常而不仅仅是一种类型的响应(在这种情况下,{{1} })。如何将状态代码注入我的异常,以便我可以使用自定义错误消息抛出多种类型的状态?

JAX-RS资源

var jamie = require('./main'); 
console.info(jamie); //{facebook: null} //values aren't updated when importing from the same file.
jamie.main.facebook = true;
console.info(jamie); //{facebook: true}

自定义例外

Status.BAD_REQUEST

自定义异常处理程序/ ExceptionMapper实现

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response memberRegistration(
        JSONObject json,
        @HeaderParam("Client-ID") String clientId,
        @HeaderParam("Client-Secret") String clientSecret) throws WebApplicationException, Exception {

        // Authenticate the user using the credentials provided
        appAuth.checkClientId(clientId, clientSecret);
        if (!"new".equals(json.get("type_of_membership"))) {
            throw new WebApplicationException("Type of membership (new) is not correct for this route.");
        }
        return Response.ok(json, MediaType.APPLICATION_JSON).build();

}

1 个答案:

答案 0 :(得分:2)

我不知道我是否收到您的问题,但我建议您在自定义异常中添加一个实例变量来保存您想要的状态代码,您可以按照以下方式执行此操作:

public class WebApplicationException extends Exception implements Serializable
{
private static final long serialVersionUID = 1L;
private Response.Status status = Response.Status.BAD_REQUEST;

public WebApplicationException() {
    super();
}
public WebApplicationException(String msg) {
    super(msg);
}
public WebApplicationException(String msg, Exception e)  {
    super(msg, e);
}

public WebApplicationException(String msg, Response.Status status) {
    super(msg);
    this.status = status;
}
public WebApplicationException(String msg, Exception e, Response.Status status)  {
    super(msg, e);
    this.status = status;
}

public Response.Status getStatus() {
     return status;
}
}

然后你可以修改" WebApplicationExceptionHandler"中的return语句。如

return Response.status(exception.getStatus()).entity(json.toString()).build();