봄의 마지막 점 뒤에 아무것도 같은 파일 확장자를 것을 고려 .json
하거나 .xml
당신의 매개 변수를 검색하는 데 trucate.
그래서 당신이 가지고 있다면 /somepath/{variable}
:
/somepath/param
, /somepath/param.json
, /somepath/param.xml
또는 /somepath/param.anything
값으로 될 것이다 PARAMparam
/somepath/param.value.json
, /somepath/param.value.xml
또는 /somepath/param.value.anything
값으로 될 것이다 PARAMparam.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
값으로 될 것이다 PARAMparam
/somepath/param.value.json
, /somepath/param.value.xml
또는 /somepath/param.value.anything
값으로 될 것이다 PARAMparam.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은 이제 customN을 제공하기 위해 contentNegotiation 옵션을 허용하지만 RequestMappingHandlerMapping의 특성을 true (기본값 false)로 변경해야합니다 (cf. https://jira.springsource.org/browse/SPR-7632). ).
이러한 이유로 여전히 모든 mvc : annotation-driven 구성을 대체해야합니다. 커스텀 RequestMappingHandlerMapping을 요청하기 위해 Spring 티켓을 열었습니다. https://jira.springsource.org/browse/SPR-11253 . 참여하고 있다면 투표 해주세요.
재정의하는 동안 사용자 지정 실행 관리 재정의도 고려해야합니다. 그렇지 않으면 모든 사용자 지정 예외 매핑이 실패합니다. messageCoverters를 목록 Bean과 함께 재사용해야합니다.
<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