Я обновляю версию Spring унаследованного приложения с 4.x до 5.1. Это приложение имеет API для отдыха на основе Spring MVC. Он использует пользовательское сопоставление обработчика, которое расширяет AbstractDetectingUrlHandlerMapping
, и адаптер обработчика, который AnnotationMethodHandlerAdapter
.
Так как AnnotationMethodHandlerAdapter
был удален в Spring 5.x в пользу RequestMappingHandlerAdapter
, я должен изменитьАдаптер обработчика на RequestMappingHandlerAdapter
. Ниже приведены вопросы -
1) Могу ли я продолжать использовать пользовательскую реализацию AbstractDetectingUrlHandlerMapping
? Будет ли это работать с RequestMappingHandlerAdapter
? Или, если я использую RequestMappingHandlerAdapter
, мне придется использовать RequestMappingHandlerMapping
?
2) Чем RequestMappingHandlerMapping
отличается от AbstractDetectingUrlHandlerMapping
? AbstractDetectingUrlHandlerMapping
отображает абсолютный URL или относительный путь с контроллером / обработчиком?
В Spring 4.x у меня есть следующая реализация -
servlet.xml
<bean name="extHandlerMapping" class="mypackage.CustomHandlerMapping">
<property name="interceptors">
<list>
<bean class="mypakage.RequestInterceptor"/>
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="mypackage.spring.BindingInitializer"/>
</property>
<property name="cacheSeconds" value="0"/>
</bean>
CustomHandlerMapping.java
public class CustomHandlerMapping extends AbstractDetectingUrlHandlerMapping {
protected String[] determineUrlsForHandler(String beanName) {
........
............
}
protected String[] determineUrlsForHandlerMethods(Class<?> handlerType, final boolean hasTypeLevelMapping) {
......
..........
}
}