- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试注册 HandlerInterceptorAdapter
例如,无论我做什么,它都不会被执行。
我试过复制 the example from the spring documentation没有运气。
会不会是<annotation-driven>
正在做一些可能会阻止我的拦截器被注册的事情吗?
我尝试从 handlerMapping
中删除 ID尽管这只会导致 spring 在容器中注册两个实例。
我已经尝试在根上下文和 servlet 上下文中注册。
完整的 servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!-- Configures the @Controller programming model -->
<annotation-driven/>
<beans:bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<beans:property name="interceptors">
<beans:list>
<beans:ref bean="officeHoursInterceptor"/>
</beans:list>
</beans:property>
</beans:bean>
<beans:bean id="officeHoursInterceptor"
class="com.johnsands.web.servlet.TimeBasedAccessInterceptor">
<beans:property name="openingTime" value="9"/>
<beans:property name="closingTime" value="18"/>
</beans:bean>
<!-- ReST Exception Handling
http://www.stormpath.com/blog/spring-mvc-rest-exception-handling-best-practices-part-1
-->
<beans:bean id="restExceptionResolver"
class="com.stormpath.spring.web.servlet.handler.RestExceptionHandler">
<beans:property name="order" value="100"/>
<beans:property name="errorConverter">
<beans:bean class="com.johnsands.spring.web.servlet.handler.BasicRestErrorConverter"/>
</beans:property>
<beans:property name="errorResolver">
<beans:bean class="com.stormpath.spring.web.servlet.handler.DefaultRestErrorResolver">
<beans:property name="localeResolver" ref="localeResolver"/>
<beans:property name="defaultMoreInfoUrl" value="mailto:support@mycompany.com"/>
<beans:property name="exceptionMappingDefinitions">
<beans:map>
<!-- 404 -->
<beans:entry key="com.johnsands.api.ResourceNotFoundException" value="404, _exmsg"/>
<!-- 500 (catch all): -->
<beans:entry key="Throwable" value="500"/>
</beans:map>
</beans:property>
</beans:bean>
</beans:property>
</beans:bean>
<beans:bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"/>
<!-- Handles HTTP GET requests for /static/** by efficiently serving up static resources in the ${webappRoot}/static/ directory -->
<resources mapping="/static/**" location="/static/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!-- Imports user-defined @Controller beans that process client requests -->
<beans:import resource="controllers.xml" />
</beans:beans>
controllers.xml 没有做什么
<!-- Maps '/' requests to the 'home' view -->
<mvc:view-controller path="/" view-name="home"/>
<mvc:view-controller path="/login" view-name="login" />
<mvc:view-controller path="/logout" view-name="logout" />
<!-- Scans the classpath of this application for @Components to deploy as beans -->
<context:component-scan base-package="com.johnsands" />
处理程序如下:
public class TimeBasedAccessInterceptor
extends HandlerInterceptorAdapter {
private static final Logger log =
LoggerFactory.getLogger(TimeBasedAccessInterceptor.class);
private int openingTime;
private int closingTime;
public TimeBasedAccessInterceptor() {
log.info(" *** Constructing Instance *** ");
}
public void setOpeningTime(int openingTime) {
this.openingTime = openingTime;
}
public void setClosingTime(int closingTime) {
this.closingTime = closingTime;
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
log.info(" *** (preHandle) *** ");
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
if (openingTime <= hour && hour < closingTime) {
return true;
} else {
response.sendRedirect("http://www.google.com.au");
return false;
}
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView)
throws Exception {
log.info(" *** (postHandle) *** ");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex)
throws Exception {
log.info(" *** (afterCompletion) *** ");
}
}
最佳答案
是的,关于<mvc:annotation-driven/>
,你是对的覆盖您使用通过它注册的自定义拦截器创建的 RequestMappingHandlerMapping。注册拦截器的方法是使用 <mvc:interceptors..>
:
<mvc:interceptors>
<bean class=".."/>
</mvc:interceptors>
或者如果你想在一个特定的映射中:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/test"/>
<bean class="test"></bean>
</mvc:interceptor>
</mvc:interceptors>
如果你想要一个明确的RequestMappingHandlerMapping
, 那么您还需要定义 HandlerAdapter 以配合它并删除 mvc:annotation-driven
关于java - 什么可能导致 RequestMappingHandlerMapping 无法正确注册?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12114214/
我正在对我使用 mybatis 学到的东西进行回顾(以及给出的练习)。 我想要做的是获取一个带有简单图表的页面,该图表将在图表中获取公司员工列表。 但是当我尝试运行并单击一个链接(这将完成真正的工作)
我正在尝试注册 HandlerInterceptorAdapter例如,无论我做什么,它都不会被执行。 我试过复制 the example from the spring documentation没
我最近将 Spring 4 MVC Web 应用程序从 XML 配置转换为基于 java 的配置。这样做之后,所有 Controller 都被映射两次。我觉得这与组件扫描有关,但我无法弄清楚为什么。如
我有一个自定义 RequestMappingHandlerMapping 类,它将特殊注释解释为其映射标准的一部分。它被实例化为一个 bean: @Configuration @EnableWebMv
我似乎对如何将 RestController 添加到我的应用程序感到困惑。我很接近这里,但是当点击 url http://localhost:8080/rest/username/test 时,我在日
我正在尝试在我的 spring mvc Controller 中 Autowiring org.springframework.web.servlet.mvc.method.annotation.Re
更新:奇怪的是,只有当我用 Gradle 构建 jar 时才会抛出这个错误。 Maven 生成的 jar 运行良好!所以我目前正在探索我的 gradle 构建脚本/spring boot 配置是否以及
为了实现我们的请求映射版本控制解决方案,我实现了自己的 RequestMappingHandlerMapping 作为它的子类。我覆盖了 registerHandlerMethod() 和 looku
我们编写的 Web 应用程序需要双语 URL。我们之前使用过“plain Spring/Spring MVC”,但我们已经开始过渡到 Spring boot。 在我们较旧的 Spring 3.x/4.
我正在使用我想配置 RequestMappingHandlerMapping用于禁用useTrailingSlashMatch 。当我声明另一个RequestMappingHandlerMapping
我已经创建了一个自定义注解来对我的 API 进行版本控制。 运行应用程序时一切正常。 但是,当我尝试使用 MockMvc 测试我的 Controller 时,我编写的自定义 RequestMappin
尝试制作一些 spring 示例程序 - 不断出现错误 - 碰巧我的 Controller 无法处理/hello 请求。这是来自 log4j 的调试信息。 13:50:58,502 {TRAC
我在运行时收到以下错误。 Exception encountered during context initialization - cancelling refresh attempt: org.s
我有自己的 RequestMappingHandlerMapping 并且我正在使用 springfox-swagger-ui。添加自定义映射后,我无法在 http://localhost:8080/
我刚刚创建了我的 Controller ,但是当我尝试启动我的应用程序时,我收到标题中提到的错误。 我花了一些时间摆弄我的 Controller ,但看不到任何重复的映射,因此不完全确定出了什么问题。
我的 Spring Web MVC 项目外部有一个 Controller 加载器。 喜欢:Class myControllerClass = classLoader.loadClass("withfu
我正在将我的一个应用程序从 Spring 工具套件 IDE 移植到纯 Eclipse Java EE IDE。在这个过程中,我正在重命名一些包并更改为基于 Maven。然后所有 Controller
我有一个像这样的 spring MVC 配置类: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigure
我构建了一个简单的 Spring MVC 应用程序,它可以在我的本地机器上完美运行。然而,将其上传到 Google App Engine 后,我收到了 HTTP 500 错误。 查看日志,我收到此 I
我正在使用 spring java 配置来创建一个网络应用。 当我在 tomcat 上运行时,它说找不到资源/myapp/myapp 在控制台输出中,我注意到以下内容。我不确定这是否会导致任何问题。
我是一名优秀的程序员,十分优秀!