让我们说,我正在收听网址v1/shop/{PATH_PARAM}/status.xml
。每当在v1/shop/some_value/status.xml
发出请求时,它将被重定向到我的方法。
但是,让我们说,用户在这条路径上犯了错误?泽西岛本身会发送“错误请求”或“未实施”方法或类似的回复。有没有一种方法,而不是球衣发送这个回应,我可以处理这些反应?假设我将创建一个新功能,它将监听所有,除了那些我为业务案例实现的功能。因此,任何未正确构造的请求或某些不受支持的媒体请求都将转到此方法,以便我可以向用户发送更合理的响应
答案 0 :(得分:0)
您可以创建一个Servlet Filter,将其配置为拦截与您的Web服务根URL(甚至是部署了Web服务的Web服务器的根URL)匹配的所有URL,让它将请求传递给Web服务,然后当响应到达过滤器时,如果是某种Web服务错误,您可以将响应更改为您想要的任何内容,使其重定向到某个自定义错误页面等。
答案 1 :(得分:0)
我刚刚使用“异常映射器”执行此操作。以下是有关如何使用resteasy执行该操作的教程:https://community.jboss.org/wiki/RESTEasyExceptionHandlingWithExceptionMapper?_sscc=t
一位同事告诉我泽西岛有类似的东西。
这是我用来确保我没有得到空内容的代码,因为有时我会忘记,并且我确定其他人会忘记,看看标题/ HTTP状态。
import org.jboss.resteasy.spi.Failure;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
@Provider
public class PipelineMgrExceptionMapper implements ExceptionMapper<Exception> {
@Override
public Response toResponse(Exception e) {
if (e instanceof Failure) {
Failure f = (Failure) e;
return Response.fromResponse(f.getResponse()).entity(f.getMessage()).type(MediaType.TEXT_PLAIN).build();
} else {
return Response.status(500).entity(e.getMessage()).type(MediaType.TEXT_PLAIN).build();
}
}
}