8

是否可以从 RESTeasy 接口返回 HTTP 错误?我目前正在为此使用链式网络过滤器,但我想知道是否可以直接从界面...

示例 sudo 代码:

@Path("/foo")
public class FooBar {

    @GET
    @Path("/bar")
    @Produces("application/json")
    public Object testMethod(@HeaderParam("var_1") @DefaultValue("") String var1,
                             @HeaderParam("var_2") @DefaultValue("") String var2 {

        if (var1.equals(var2)) {
            return "All Good";
        } else {
            return HTTP error 403;
        }
    }
}
4

3 回答 3

21

找到了解决方案,非常简单:

throw new WebApplicationException();

所以:

@Path("/foo")
public class FooBar {

    @GET
    @Path("/bar")
    @Produces("application/json")
    public Object testMethod(@HeaderParam("var_1") @DefaultValue("") String var1,
                             @HeaderParam("var_2") @DefaultValue("") String var2 {

        if (var1.equals(var2)) {
            return "All Good";
        } else {
            throw new WebApplicationException(HttpURLConnection.HTTP_FORBIDDEN);
        }
    }
}
于 2012-03-14T00:52:44.970 回答
2

您还可以在您的方法中抛出 java 异常,然后提供一个javax.ws.rs.ext.ExceptionMapper将其映射到 Http 错误。以下博客有更多详细信息,尤其是第 2 步:

https://www.javacodegeeks.com/2012/06/resteasy-tutorial-part-3-exception.html

于 2012-09-10T06:48:05.847 回答
2

返回 ajavax.ws.rs.core.Response以设置响应代码。

import javax.ws.rs.core.Response;

@Path("/foo")
public class FooBar {

    @GET
    @Path("/bar")
    @Produces("application/json")
    public Response testMethod(@HeaderParam("var_1") @DefaultValue("") String var1,
                             @HeaderParam("var_2") @DefaultValue("") String var2 {

        if (var1.equals(var2)) {
            return Response.ok("All Good").build();
        } else {
            return Response.status(Response.Status.FORBIDDEN).entity("Sorry").build()
        }
    }
}

这将为您节省与异常相关的堆栈跟踪。

于 2017-05-19T07:23:52.067 回答