Spring MVC拦截器映射问题 - java

我有这段XML:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/statics/**" />
        <bean class="com.company.website.servlet.StaticsHandlerInterceptor" />
    </mvc:interceptor>
    <mvc:interceptor>
        <mvc:mapping path="/data/**" />
        <bean class="com.company.website.servlet.AJAXHandlerInterceptor" />
    </mvc:interceptor>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <bean class="com.company.website.servlet.PageHandlerInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

我有三个不同的拦截器,这是有原因的,尽管StaticsHandlerInterceptor只是返回preHandletrue方法(对于我所有的静态内容(js,css等))。第二个是针对AJAX请求的。第三个是实际页面。我所看到的是,在应有的时候调用了静态函数和AJAX拦截器。但是,对于它们,页面拦截器总是被调用。我只希望为页面调用页面拦截器。我该如何实现?

java大神给出的解决方案

假设您为网页使用一致的命名方案,请使用-例如如果您的外部可见页面URL以.html结尾,请指定:

<mvc:mapping path="/**/*.html" />

尽管具有这样的“扩展”并不是很RESTful-您可能更喜欢使用以下方案:

/user/{id}的GET =返回用户{id}的用户对象,JSON格式
POST到/user/{id} =从JSON对象更新User对象
GET to /user/page/{id} =返回用户{id}的HTML页面

然后,您可以使用一个不错的可读性,语义映射,例如:

<mvc:mapping path="/**/page/**" />

这将适用于URL结构的任何“深度”。

编辑:确定,所以看来使用mvc:interceptors风格的bean声明不会为您提供表达能力,您需要通过模式而不是包含来指定排除。

根据我在this blog中的理解,使用更详细的HandlerMapping方法将使您反转匹配逻辑-您可以指定不匹配的内容以获得所需的内容:

<bean id="nonStaticNonDataMapper" class="org.springplugins.web.IgnoreSelectedAnnotationHandlerMapping">
<property name="order">
    <value>0</value>
</property>
<property name="urls">
    <list>
        <value>/statics/**</value>
        <value>/data/**</value>
    </list>
</property>
<property name="interceptors">
    <list>
        <bean class="com.company.website.servlet.PageHandlerInterceptor" />
    </list>
</property>

(为上述代码段的格式表示歉意,Markdown认为/**是注释:-)

Spring Boot如何在POST之后返回响应 - java

我想创建一个新客户并在创建客户后返回客户编号。客户编号必须是从50000开始的自动递增的唯一编号。到目前为止,我已经成功创建了一个客户,但是我不确定应该如何生成客户编号,将其保存到数据库中,并在触发POST时将其作为成功消息显示给用户。json下面是所需的响应;{ "customerNumber": "50002", …

页面加载而不是提交时发生struts验证 - java

请原谅我;我对Struts有点陌生。我遇到一个问题,即页面加载而不是我实际提交表单时发生了验证。我整天都在论坛上搜寻和搜寻,没有任何运气。我显然做错了一些事情,应该很容易确定,但是我还没有发现问题所在。这是我的struts.xml的片段:<action name="*Test" method="{1}" clas…

DataSourceTransactionManager和JndiObjectFactoryBean和JdbcTemplate的用途是什么? - java

以下的用途是什么:org.springframework.jdbc.core.JdbcTemplate org.springframework.jdbc.datasource.DataSourceTransactionManager org.springframework.jndi.JndiObjectFactoryBean <tx:annotatio…

Spring MVC:如何获取请求的处理程序方法 - java

我正在尝试根据Spring @RequestMapping注释方法上存在的注释实现一些逻辑。因此,我的方法中有一个HttpServletRequest实例,我想问一下spring“给我一个方法,该方法将被调用以处理此请求”,因此我可以使用反射API来询问是否存在我的注释,因此我可以更改处理。有什么简单的方法可以从Spring MVC获取此信息? java大神…

实例化类型<?>的泛型类 - java

我正在为SCJP / OCPJP学习,并且遇到了一个对我来说很奇怪的示例问题。该示例代码实例化了两个通用集合:List<?> list = new ArrayList<?>(); List<? extends Object> list2 = new ArrayList<? extends Object>(); …