Я пишу пользовательский обработчик-перехватчик для того, чтобы иметь многоязычные адреса URL. Например, когда пользователь обращается к uri /de/auto
, появляется немецкий контент, когда пользователь обращается к /en/car
, тогда появляется английский контент. Я хочу, чтобы оба запроса перенаправлялись на один и тот же контроллер и один и тот же метод:
@Controller
public class MultiLangController {
@RequestMapping(value="/en/car", method = RequestMethod.GET)
public @ResponseBody String writePage() {
return "some content";
}
и мой перехватчик реализован так (упрощенная версия):
public class MultiLangInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
String requestUrl = request.getRequestURI().substring(request.getContextPath().length());
if ("/de/auto".equals(requestUrl)) {
String redirect = request.getContextPath() + "/en/car";
response.sendRedirect(redirect);
return false;
}
return true;
}
}
Теперь, когда я получаю доступ к /en/car
url в браузере, возвращается правильная страница (с сообщением «некоторый контент»), и в журналах показывается, что запрос прошел через мой перехватчик. Когда я получаю доступ к /de/auto
, возвращается ошибка 404 и, согласно журналу, запрос не дошел до моего перехватчика. Но почему? Не должен ли запрос пройти через все перехватчики, пока один из них не остановит его, вернув false?
Для ясности я не использую mvc:annotation-driven
, потому что скрывал мой пользовательский перехватчик . Я определил все инструкции
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<ref bean="multiLangInterceptor" />
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter"/>
<ref bean="stringHttpMessageConverter"/>
</list>
</property>
</bean>
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<bean id="multiLangInterceptor" class="example.MultiLangInterceptor" />
<bean id="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter"/>
Спасибо за ответы!