相关疑难解决方法(0)

Spring调用错误的控制器映射

我正在使用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)

java validation tomcat spring-mvc

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

spring-mvc ×1

tomcat ×1

validation ×1