我对 Spring MVC 和 REST 有疑问。问题是,当我发布一个没有扩展名的 url 或除 json 或 html 或 htm 之外的任何扩展名时,我总是得到一个 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:/
如果有人有想法请帮忙,谢谢。