Java servlet url模式与通配符匹配时出现问题

Java servlet url模式与通配符匹配时出现问题,java,spring,servlets,Java,Spring,Servlets,当servlet映射url模式使用通配符时,我很难将请求映射到正确的servlet。我希望所有以“/profile api”开头的请求都映射到我即将编写的新REST服务 从web.xml: <!-- default servlet --> <servlet-mapping> <servlet-name>professional</servlet-name> <url-pattern>/</url-pattern&g

当servlet映射url模式使用通配符时,我很难将请求映射到正确的servlet。我希望所有以“/profile api”开头的请求都映射到我即将编写的新REST服务

从web.xml:

<!-- default servlet -->
<servlet-mapping>
    <servlet-name>professional</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- profile api -->
<servlet-mapping>
    <servlet-name>profile-api</servlet-name>
    <url-pattern>/profile-api/*</url-pattern>
</servlet-mapping>
我希望对“{localhost}/profile api/setoptin/12345”的请求能够正确路由到ProfileAPIController,但事实并非如此

将servlet映射url模式更改为更具体但仍然通用的模式也会失败:

<servlet-mapping>
    <servlet-name>profile-api</servlet-name>
    <url-pattern>/profile-api/setoptin/*</url-pattern>
</servlet-mapping>

配置文件api
/配置文件api/setoptin/*
我能够按预期路由请求的唯一方法是包含完整、准确的路径:

<servlet-mapping>
    <servlet-name>profile-api</servlet-name>
    <url-pattern>/profile-api/setoptin/12345</url-pattern>
</servlet-mapping>

配置文件api
/配置文件api/setoptin/12345
显然,这是不可接受的,因为用户id必须是可变的


在所有情况下,请求都映射到默认的“professional”servlet。我尝试重新排序servlet映射节点,但没有结果。我在servlet配置中的AnnotationMethodHandlerAdapter bean中将“AlwaySuseFilPath”设置为“true”(但也尝试将其设置为“false”)。我觉得自己好像忽略了一些简单的东西,但却看不到森林中的树木。

尝试删除
@RequestMapping
注释,可能会有一些歧义。哇,那真是太快了!这就解决了问题,现在它正按预期工作。非常感谢。很高兴您在
AnnotationMethodHandlerAdapter
上设置了
AlwaysSuseSelelPath
,但这不是正在使用的。应改用
RequestMethodHandlerMapping
。(假设您有
@EnableWebMvc
。若要修复此问题,请创建一个
BeanPostProcessor
,在正确的实例上设置所需的属性(添加该类型的bean不会有帮助!)。但是你真的需要两个不同的servlet吗?为什么不简单地在一个on中处理它们呢?尝试删除
@RequestMapping
注释,可能会有一些歧义。哇,那真是太快了!解决了问题,现在正如预期的那样工作。谢谢!很高兴你在
注释我上设置了
AlwaysuseulPath
thodHandlerAdapter
,但它不是正在使用的。应该改用
RequestMethodHandlerMapping
。(假设您有
@EnableWebMvc
。要修复此问题,请创建一个
BeanPostProcessor
,在正确的实例上设置所需的属性(添加这种类型的bean不会有帮助!)但是你真的需要两个不同的servlet吗?为什么不简单地在一个单独的服务器上处理它们呢?
<servlet-mapping>
    <servlet-name>profile-api</servlet-name>
    <url-pattern>/profile-api/setoptin/12345</url-pattern>
</servlet-mapping>