RESTEasy(WildFly16)abortWith不生效:需加return?可抛WebApplicationException?
WildFly 16中RESTEasy abortWith方法的执行问题解答
问题场景
在WildFly 16环境中使用RESTEasy的abortWith(Response response)方法时,遇到如下问题:
编写了多段包含abortWith的判断逻辑,示例代码如下:
if(fails1){ System.out.println("fails 1"); abortWith(...); } if(fails2){ System.out.println("fails 2"); abortWith(...); }
当fails1和fails2同时为true时,两个abortWith方法都会被执行,只有在fails1的abortWith语句后添加return,才会返回对应的响应。
问题解答
1. 是否必须在abortWith之后添加return语句?
是的,必须添加return语句。abortWith仅负责标记要发送给客户端的响应,但不会自动终止当前方法的执行流程。调用该方法后,代码会继续向下执行,所以当多个判断条件同时成立时,后续的abortWith也会被触发执行。只有添加return,才能直接终止当前方法,避免后续代码运行。
2. 能否通过抛出WebApplicationException来中断过滤器链?
可以。
抛出WebApplicationException不仅会终止当前方法的执行,还会自动中断整个过滤器/拦截器链,框架会自动将异常中携带的Response作为响应返回给客户端。
改写示例代码如下:
if(fails1){ System.out.println("fails 1"); throw new WebApplicationException(Response.status(400).entity("fails 1").build()); } if(fails2){ System.out.println("fails 2"); throw new WebApplicationException(Response.status(400).entity("fails 2").build()); }
这种方式无需额外添加return,因为抛出异常会直接中断执行流程,后续代码不会被执行,同时能正确返回预期响应。
内容的提问来源于stack exchange,提问作者MFH
相关产品推荐
相关产品推荐

