我有一段这样的代码。但它似乎没有找到在 @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/