从 RESTeasy 接口返回 HTTP 错误
-
13-12-2019 - |
题
是否可以从 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;
}
}
}
解决方案
找到了解决方案,它非常简单:
throw new WebApplicationException();
.
SO:
@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);
}
}
}
. 其他提示
您还可以在方法中抛出 java 异常,然后提供 javax.ws.rs.ext.ExceptionMapper
将其映射到 Http 错误。以下博客提供了更多详细信息,特别是步骤 #2:
https://www.javacodegeeks.com/2012/06/resteasy-tutorial-part-3-exception.html
返回一个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()
}
}
}
.
,它将保存与异常关联的堆栈特征。
不隶属于 StackOverflow