Standardmäßig registriert Spring eine BeanNameUrlHandlerMapping
und eine DefaultAnnotationHandlerMapping
, ohne dass eine explizite Konfiguration erforderlich ist.
Wenn Sie Ihre eigenen HandlerMapping
Beans definieren, werden die Standardbeans nicht registriert, und Sie erhalten nur die explizit deklarierten Beans.
So weit, so gut. Das Problem tritt auf, wenn Sie <mvc:annotation-driven/>
zum Mix hinzufügen. Diese auch deklariert eine eigene DefaultAnnotationHandlerMapping
, die die Standardwerte ersetzt. Wenn Sie jedoch auch Ihre eigene deklarieren, enden Sie mit zwei. Da sie in der Reihenfolge der Deklaration konsultiert werden, bedeutet dies normalerweise, dass die von <mvc:annotation-driven/>
registrierte Person zuerst angerufen wird und Ihre eigene ignoriert wird.
Es wäre besser, wenn die DefaultAnnotationHandlerMapping
, die von <mvc:annotation-driven/>
registriert wird, sich wie die Standardfunktion verhält, d. H. Wenn explizit deklarierte Vorrang haben, aber das ist nicht die Art, wie sie geschrieben wurde.
Meine aktuelle Präferenz ist es, <mvc:annotation-driven/>
überhaupt nicht zu verwenden, es ist zu verwirrend und zu unvorhersehbar, wenn es mit anderen Konfigurationsoptionen gemischt wird. Es macht nicht wirklich etwas besonders Komplexes, es ist nicht schwierig oder ausführlich, das Zeug, das es für dich tut, explizit hinzuzufügen, und das Endergebnis ist einfacher zu folgen.
Haben Sie auch ' ' dort irgendwo? –
skaffman
Ja, um javax.validation handling zu aktivieren (und vielleicht einen Haufen anderer Dinge) – Bozho