다국어 URL 주소를 갖기 위해 커스텀 핸들러 인터셉터를 쓰고 있습니다. 예를 들어 사용자가 uri /de/auto
에 액세스하면 deutsch 콘텐츠가 표시되고 사용자가 /en/car
에 액세스하면 영어 콘텐츠가 표시됩니다.Spring 3 HandlerInterceptorAdapter. 요청은 404로 끝나기 전에 요격합니다.
@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을 액세스 할 때, 올바른 페이지가 둘 다 요청이 동일한 컨트롤러와 동일한 방법으로 재 지정하려면 리턴 된 ("some content"라는 메시지와 함께) 그리고 로그는 그 인터셉터를 통해 전달 된 요청을 보여줍니다. /de/auto
에 액세스하면 404 오류가 반환되고 요청에 따라 요청이 인터셉터로 전달되지 않습니다. 하지만 왜? 그들 중 하나가 거짓을 돌려서 중지시킬 때까지 모든 인터셉터를 통과하도록 요청해서는 안됩니까?
은 명확하게하기 위해 hidding my custom interceptor이므로 사용하지 않았습니다. 모두 수동으로 정의했습니다.
<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"/>
답변 해 주셔서 감사합니다!