【问题标题】:How to handle unsupported/unimplemented methods for Rest Client如何为 Rest Client 处理不受支持/未实现的方法
【发布时间】:2012-10-26 22:25:50
【问题描述】:

可以这么说,我正在收听 URL v1/shop/{PATH_PARAM}/status.xml。每当在v1/shop/some_value/status.xml 发出请求时,它将被重定向到我的方法。

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

【问题讨论】:

    标签: java web-services rest jersey


    【解决方案1】:

    您可以创建一个Servlet Filter,将其配置为拦截与您的 Web 服务根 URL(甚至是部署 Web 服务的 Web 服务器的根 URL)匹配的所有 URL,让它将请求传递到 Web服务,然后当响应到达过滤器时,如果是某种 Web 服务错误,您可以将响应更改为您想要的任何内容,使其重定向到某个自定义错误页面等。

    【讨论】:

      【解决方案2】:

      我刚刚使用“异常映射器”完成了这项工作。这是一个关于如何使用 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();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-02-07
        • 1970-01-01
        • 2020-11-24
        • 1970-01-01
        • 2012-10-18
        • 2013-10-12
        • 1970-01-01
        • 1970-01-01
        • 2021-07-20
        相关资源
        最近更新 更多