Java 是否有一种方法可以使用jersey和guice在url开头处理额外的斜杠?
我有一个RESTAPI,它使用jersey和guice进行依赖注入。一切都很好,我已经启用了FEATURE_CANONICALIZE_URI_PATH和FEATURE_NORMALIZE_URI,并且在几乎所有情况下都可以处理额外的斜杠。例如:Java 是否有一种方法可以使用jersey和guice在url开头处理额外的斜杠?,java,jakarta-ee,jersey,guice,guice-servlet,Java,Jakarta Ee,Jersey,Guice,Guice Servlet,我有一个RESTAPI,它使用jersey和guice进行依赖注入。一切都很好,我已经启用了FEATURE_CANONICALIZE_URI_PATH和FEATURE_NORMALIZE_URI,并且在几乎所有情况下都可以处理额外的斜杠。例如: http://localhost:8080/my_service/param1//param2 问题是我无法找到正确的方法来处理url开头(服务路径之前)的额外斜杠。像这样: http://localhost:8080//my_service/para
http://localhost:8080/my_service/param1//param2
问题是我无法找到正确的方法来处理url开头(服务路径之前)的额外斜杠。像这样:
http://localhost:8080//my_service/param1/param2
这就是我目前设置内容的方式:
web.xml
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>MyServletConfig</listener-class>
</listener>
MyService.java
@Path("/")
public class MyService {
@GET
@Path("/{param1}/{param2}")
@Produces("application/json")
public String get(
@PathParam("param1") final String param1,
@PathParam("param2") final String param2) {
return "{\"param1\":\"" + param1 + "\"}";
}
}
我可以看出,问题实际上是,在服务名称之前带有//的请求实际上没有被servlet处理,因为它在过滤器映射的url映射中不匹配,但我不确定正确的解决方案。我是否需要在url与servlet匹配之前进行url重写,或者是否有更好的方法映射请求url?快速线索:
是一个JavaWeb过滤器。它是一个非常强大的工具,就像Apache的mod_rewrite一样。
使用来自快速线索的经典htaccess重写设置过滤器:
是一个JavaWeb过滤器。它是一个非常强大的工具,就像Apache的mod_rewrite一样。
从使用经典htaccess重写设置过滤器如果您使用的是jetty,只需添加模块即可
如果您使用的是jetty,只需添加模块即可
@Path("/")
public class MyService {
@GET
@Path("/{param1}/{param2}")
@Produces("application/json")
public String get(
@PathParam("param1") final String param1,
@PathParam("param2") final String param2) {
return "{\"param1\":\"" + param1 + "\"}";
}
}
Module: rewrite-compactpath
: Add a rule to the rewrite module to compact paths so that double slashes
: in the path are treated as a single slash.
Depend: rewrite
XML: etc/rewrite-compactpath.xml