Springは、最後のドットの後ろにあるものは、.json
or などのファイル拡張子である.xml
と見なし、それを切り捨ててパラメーターを取得します。
だからあなたが持っている場合/somepath/{variable}
:
/somepath/param
、/somepath/param.json
、/somepath/param.xml
または/somepath/param.anything
値PARAMをもたらしますparam
/somepath/param.value.json
、/somepath/param.value.xml
または/somepath/param.value.anything
値を持つパラメータになりますparam.value
マッピングを/somepath/{variable:.+}
推奨どおりに変更すると、最後のドットを含むすべてのドットがパラメーターの一部と見なされます。
/somepath/param
値を持つパラメータになります param
/somepath/param.json
値を持つパラメータになります param.json
/somepath/param.xml
値を持つパラメータになります param.xml
/somepath/param.anything
値を持つパラメータになります param.anything
/somepath/param.value.json
値を持つパラメータになります param.value.json
- ...
拡張機能の認識にmvc:annotation-driven
関心がない場合は、automagic をオーバーライドして無効化できます。
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="contentNegotiationManager" ref="contentNegotiationManager"/>
<property name="useSuffixPatternMatch" value="false"/>
</bean>
だから、もう一度、あなたが持っているなら/somepath/{variable}
:
/somepath/param
、/somepath/param.json
、/somepath/param.xml
または/somepath/param.anything
値PARAMをもたらしますparam
/somepath/param.value.json
、/somepath/param.value.xml
または/somepath/param.value.anything
値を持つパラメータになりますparam.value
注:デフォルトの構成との違いは、のようなマッピングがある場合にのみ表示されますsomepath/something.{variable}
。Resthubプロジェクトの問題を参照
拡張機能の管理を維持したい場合は、Spring 3.2以降、suffixPattern認識を有効にしたまま登録済み拡張機能に限定するために、RequestMappingHandlerMapping BeanのuseRegisteredSuffixPatternMatchプロパティを設定することもできます。
ここでは、jsonおよびxml拡張のみを定義します。
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="contentNegotiationManager" ref="contentNegotiationManager"/>
<property name="useRegisteredSuffixPatternMatch" value="true"/>
</bean>
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false"/>
<property name="favorParameter" value="true"/>
<property name="mediaTypes">
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean>
mvc:annotation-drivenは、カスタムBeanを提供するcontentNegotiationオプションを受け入れるようになりましたが、RequestMappingHandlerMappingのプロパティをtrue(デフォルトはfalse)に変更する必要があることに注意してください(https://jira.springsource.org/browse/SPR-7632を参照))。
そのため、すべてのmvc:annotation-driven構成をオーバーライドする必要があります。Springへのチケットを開いて、カスタムのRequestMappingHandlerMappingを要求しました(https://jira.springsource.org/browse/SPR-11253)。興味のある方は投票してください。
オーバーライドするときは、カスタム実行管理のオーバーライドも考慮してください。そうしないと、すべてのカスタム例外マッピングが失敗します。リストBeanでmessageCoverterを再利用する必要があります。
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<util:list id="messageConverters">
<bean class="your.custom.message.converter.IfAny"></bean>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</util:list>
<bean name="exceptionHandlerExceptionResolver"
class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
<property name="order" value="0"/>
<property name="messageConverters" ref="messageConverters"/>
</bean>
<bean name="handlerAdapter"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer">
<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="conversionService" ref="conversionService" />
<property name="validator" ref="validator" />
</bean>
</property>
<property name="messageConverters" ref="messageConverters"/>
</bean>
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</bean>
私は、オープンソースプロジェクトでは、実装Resthub私はこれらの主題に関する一連のテストの一部だということ:参照https://github.com/resthub/resthub-spring-stack/pull/219/files&https://でgithub.com/resthub/resthub-spring-stack/issues/217