В моем Spring XML у меня есть следующий фрагмент:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="useDefaultSuffixPattern" value="false"/>
</bean>
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper" ref="objectMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
Насколько я понимаю, это означает, что Spring НЕ должен регистрировать «abc.*» и «abc/», когда у меня есть сопоставление для «abc».
В одном из моих контроллеров у меня есть метод, который записывает изображение в ответ:
@RequestMapping(value="{path}", method=RequestMethod.GET, produces=MediaType.IMAGE_PNG_VALUE)
@ResponseBody
public void getPath(
@PathVariable String path,
HttpServletResponse res) {
...
}
Это прекрасно работает, когда я запрашиваю что-то вроде «abc», но когда я запрашиваю «abc.com», выдается ошибка 406 с текстом:
The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers."
Когда я запрашиваю «abc.img», параметр «path» получает только текст «abc»; Spring опускает расширение.
Кажется, Spring неправильно игнорирует шаблон суффикса. Почему это?
Изменить: я перевел конфигурацию Java из комментария Дирка, и следующий XML, кажется, решает эту проблему:
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
</bean>
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper" ref="objectMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
Я до сих пор не понимаю, почему исходный код не работал, но это решило мою проблему