Spring 3 HandlerInterceptorAdapter. Anfrage endet mit 404 beforecalling interceptor

Ich bin writting benutzerdefinierten handler interceptor um multilangual url-Adressen. Zum Beispiel, wenn der Benutzer greift auf uri /de/auto deutsch Inhalt wird angezeigt, wenn der Benutzer auf /en/car dann englische Inhalt angezeigt wird. Ich will beide Anfragen umleiten, um den gleichen controller und die gleiche Methode:

@Controller
public class MultiLangController {

    @RequestMapping(value="/en/car", method = RequestMethod.GET)
    public @ResponseBody String writePage() {

        return "some content";
    }

und mein interceptor implementiert ist, wie dieses (vereinfachte version):

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;        
    }
}

Nun, wenn ich auf /en/car url im browser, die richtige Seite zurückgegeben (mit Meldung "einige Inhalte") und die Protokolle zeigt, dass die Anfrage kam mir in den interceptor. Wenn ich auf /de/auto, 404-Fehler zurückgegeben, und laut logs Antrag schaffte es nicht auf meinem interceptor. Aber warum? Sollte keine Anfrage gehen Sie durch alle Abfangjäger bis einer von Ihnen hält es durch Rückgabe von false?

Zur Klarheit, ich bin nicht mit mvc:annotation-driven denn es war investieren wollte, verheimlichte meine custom-interceptor. Ich habe alle Händisch

<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"/> 

Danke für die Antworten!

InformationsquelleAutor kurochenko | 2011-07-26
Schreibe einen Kommentar