我正在使用Spring构建非常基本的mvc应用程序.它有一个控制器应该在请求体上调用验证.问题是,如果我在web.xml中定义映射,它就会停止找到正确的控制器,但是当我修改servlet应用程序上下文时,Spring会立即生成一些新的绑定,但这次基于注释的验证将被忽略.如何在仍调用基于注释的验证的同时在web.xml中控制映射?
以下是详细信息:
控制器:
@Controller
@RequestMapping("/api")
public class UserActionsController {
@RequestMapping(value="/choice", method = RequestMethod.POST)
public @ResponseBody NameValue addUserChoice(@Valid @RequestBody NameValue action)
{
return action;
}
}
Run Code Online (Sandbox Code Playgroud)
这是servlet应用程序上下文:
<mvc:annotation-driven/>
<context:component-scan base-package="com.my.package" />
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
</map>
</property>
<property name="defaultContentType" value="application/json" />
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
Web xml:
<servlet>
<servlet-name>action-api</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action-api</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
上面的配置正在运行.当我尝试更改web.xml时,问题就开始了,因此控制器只负责"/ api/*".我改成了<url-pattern>/api/*</url-pattern>.在那种情况下,Spring无法找到合适的控制器.
(DispatcherServlet:819) - DispatcherServlet with name 'action-api' processing POST request for …Run Code Online (Sandbox Code Playgroud)