java - Java Resteasy 中的赛前过滤器

标签 java rest servlet-filters resteasy

我有一段这样的代码。但它似乎没有找到在 @Path("resource-name") 中指定的小写 url 的资源方法。在资源或 Controller 上的方法匹配之前,如何应用此过滤器?

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() {

    }

最佳答案

如果您使用的是 JAX-RS 2,则可以使用 @PreMatching ContainerRequestFilter :

@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));
    }

}

关于java - Java Resteasy 中的赛前过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26049308/

相关文章:

java - 返回哪个 HTTP 响应状态

java - 如何使用 Spring Boot Filter Registration Bean 将依赖项注入(inject)到 Servlet Filter 中?

java - 根据可以为空的字段对对象列表进行排序

java - Fiji/Weka 生成的 arff 文件中的原始属性

java - 在clojure中制作一个插件系统

swift - 如何在 Vapor 中处理 PUT HTTP 请求?

rest - 如果一个 API 只提供 POST 请求功能,它是 RESTful 的吗?

java - tomcat8 非法参数异常 : The main resource set specified [/var/lib/tomcat8/app1/ROOT] is not valid

servlets - Servlet 过滤器和 Jersey 过滤器有什么区别?

java - 我可以使用 REST Assured 测试 servlet 过滤器吗?