8

RESTeasyインターフェースからHTTPエラーを返すことは可能ですか?私は現在、これにチェーンWebフィルターを使用していますが、インターフェイスから直接可能かどうかを知りたいです...

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

を返しjavax.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 に答える