Вернуть ошибку HTTP из интерфейса RESTeasy - PullRequest
7 голосов
/ 14 марта 2012

Можно ли вернуть ошибку HTTP из интерфейса RESTeasy? В настоящее время я использую цепочечные веб-фильтры для этого, но я хочу знать, возможно ли это прямо из интерфейса ...

Пример 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;
        }
    }
}

Ответы [ 3 ]

20 голосов
/ 14 марта 2012

Нашли решение и все очень просто:

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);
        }
    }
}
2 голосов
/ 10 сентября 2012

Вы также можете генерировать исключения Java в своем методе, а затем предоставить javax.ws.rs.ext.ExceptionMapper для сопоставления с ошибкой Http. Следующий блог содержит больше подробностей, в частности, шаг № 2:

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

0 голосов
/ 19 мая 2017

Возврат 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()
        }
    }
}

Это спасет вас от трассировки стека, связанной с исключением.

...