4

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でも動作します:/

誰かがアイデアを持っているなら、助けてください、ありがとう。

4

2 に答える 2