Spring MVC と REST に問題があります。問題は、拡張子のない URL、または json、html、htm 以外の拡張子の URL を投稿すると、常に xml 応答が返されることです。しかし、デフォルトで text/html 応答にしたいのです。私は多くのトピックを検索していましたが、これに対する答えが見つかりません。
ここに私のコントローラクラスがあります:
@RequestMapping(value="/user/{username}", method=RequestMethod.GET)
public String showUserDetails(@PathVariable String username, Model model){
model.addAttribute(userManager.getUser(username));
return "userDetails";
}
@RequestMapping(value = "/user/{username}", method = RequestMethod.GET,
produces={"application/xml", "application/json"})
@ResponseStatus(HttpStatus.OK)
public @ResponseBody
User getUser(@PathVariable String username) {
return userManager.getUser(username);
}
これが私のmvcコンテキスト構成です:
<mvc:resources mapping="/resources/**"
location="/resources/"/>
<context:component-scan
base-package="com.chodak.controller" />
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="defaultContentType" value="text/html" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"/>
<entry key="xml" value="application/xml"/>
</map>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass">
<value>
org.springframework.web.servlet.view.tiles3.TilesView
</value>
</property>
</bean>
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles.xml</value>
</list>
</property>
</bean>
実際、組み込みの Eclipse ブラウザーを試してみると正常に動作しますが、firefox または chrome を使用すると、拡張子のない要求に対して xml 応答が表示されます。ignoreAcceptHeader を使用してみましたが、変化はありません。
IEでも動作します:/
誰かがアイデアを持っているなら、助けてください、ありがとう。