2014-09-25 18 views
0

我有一塊這樣的代碼。但是它似乎沒有找到在@Path(「resource-name」)中指定了具有較低外殼URL的資源方法。如何在資源或控制器上的方法匹配之前應用此過濾器?Java中的Prematch過濾器resteasy

public class LowerCaseRequestFilter implements Filter { 

    @Inject 
    public LowerCaseRequestFilter() { 
    } 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 

    } 

    @Override 
    public void doFilter(@Nonnull ServletRequest servletRequest, @Nonnull ServletResponse servletResponse, @Nonnull FilterChain filterChain) throws IOException, ServletException { 

     final HttpServletRequest req = (HttpServletRequest) servletRequest; 
     final String requestUrl = req.getRequestURI(); 
     final String newUrl = requestUrl.toLowerCase(); 
     req.getRequestDispatcher(newUrl).forward(servletRequest, servletResponse); 
    } 

    @Override 
    public void destroy() { 

    } 

回答

1

如果您使用的JAX-RS 2你可以使用一個@PreMatchingContainerRequestFilter

@Provider 
@PreMatching 
public class LowerCaseFilter implements ContainerRequestFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
     String newUri = requestContext.getUriInfo().getRequestUri().toString().toLowerCase(); 
     requestContext.setRequestUri(URI.create(newUri)); 
    } 

}