Spring betrachtet alles hinter dem letzten Punkt als Dateierweiterung, wie z.B. .json
oder .xml
und kürzt es ab, um Ihren Parameter abzurufen.
Also, wenn Sie /somepath/{variable}
haben :
/somepath/param
, /somepath/param.json
, /somepath/param.xml
oder /somepath/param.anything
führen zu einem Parameter mit dem Wert param
/somepath/param.value.json
, /somepath/param.value.xml
oder /somepath/param.value.anything
führen zu einem Parameter mit dem Wert param.value
Wenn Sie Ihre Zuordnung auf /somepath/{variable:.+}
ändern, wie vorgeschlagen, wird jeder Punkt, einschließlich des letzten, als Teil Ihres Parameters betrachtet:
/somepath/param
führt zu einem Parameter mit dem Wert param
/somepath/param.json
führt zu einem Parameter mit dem Wert param.json
/somepath/param.xml
führt zu einem Parameter mit dem Wert param.xml
/somepath/param.anything
führt zu einem Parameter mit dem Wert param.anything
/somepath/param.value.json
führt zu einem Parameter mit dem Wert param.value.json
- ...
Wenn Sie die Erweiterungserkennung nicht benötigen, können Sie sie deaktivieren, indem Sie mvc:annotation-driven
automatisch überschreiben:
Also, wieder, wenn Sie /somepath/{variable}
haben :
/somepath/param
, /somepath/param.json
, /somepath/param.xml
oder /somepath/param.anything
führen zu einem Parameter mit dem Wert param
/somepath/param.value.json
, /somepath/param.value.xml
oder /somepath/param.value.anything
führen zu einem Parameter mit dem Wert param.value
Hinweis: Der Unterschied von der Standardkonfiguration ist nur sichtbar, wenn Sie eine Zuordnung wie somepath/something.{variable}
haben. siehe Resthub-Problemmeldung
Wenn Sie die Erweiterungsverwaltung beibehalten möchten, können Sie seit Spring 3.2 auch die Eigenschaft useRegisteredSuffixPatternMatch des RequestMappingHandlerMapping-Beans festlegen, um die Erkennung des Suffixmusters aktiviert zu lassen, jedoch auf registrierte Erweiterungen beschränkt.
Hier definieren Sie nur die json- und xml-Erweiterungen :
json=application/json
xml=application/xml
Beachten Sie, dass mvc:annotation-driven
jetzt eine contentNegotiation-Option akzeptiert, um ein benutzerdefiniertes Bean bereitzustellen, jedoch muss die Eigenschaft des RequestMappingHandlerMapping-Beans auf true geändert werden (standardmäßig false) (vgl. https://jira.springsource.org/browse/SPR-7632).
Aus diesem Grund müssen Sie immer noch die gesamte Konfiguration von mvc:annotation-driven
überschreiben. Ich habe ein Ticket bei Spring eröffnet, um nach einem benutzerdefinierten RequestMappingHandlerMapping zu fragen: https://jira.springsource.org/browse/SPR-11253. Bitte stimmen Sie ab, wenn Sie daran interessiert sind.
Beim Überschreiben sollten Sie auch die benutzerdefinierte Ausführungsverwaltung in Betracht ziehen. Andernfalls schlagen alle benutzerdefinierten Exception-Zuordnungen fehl. Sie müssen messageConverters mit einem Listen-Bean wiederverwenden:
Ich habe, im Open-Source-Projekt Resthub, an dem ich beteiligt bin, eine Reihe von Tests zu diesen Themen implementiert. Siehe https://github.com/resthub/resthub-spring-stack/pull/219/files & https://github.com/resthub/resthub-spring-stack/issues/217