如何处理Rest Client的不支持/未实现的方法

时间:2012-10-26 22:25:50

标签: java web-services rest jersey

让我们说,我正在收听网址v1/shop/{PATH_PARAM}/status.xml。每当在v1/shop/some_value/status.xml发出请求时,它将被重定向到我的方法。

但是,让我们说,用户在这条路径上犯了错误?泽西岛本身会发送“错误请求”或“未实施”方法或类似的回复。有没有一种方法,而不是球衣发送这个回应,我可以处理这些反应?假设我将创建一个新功能,它将监听所有,除了那些我为业务案例实现的功能。因此,任何未正确构造的请求或某些不受支持的媒体请求都将转到此方法,以便我可以向用户发送更合理的响应

2 个答案:

答案 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();
        }
    }
}