3

OK、私は春のMVCベースのjsonWebサービスを持っています。これはテストアプリです。SpringMVCベースのRESTfulJSONサービスを構築するときにこのような問題が発生したことはありません。テストサービスの出力は常に返され、空のjsonオブジェクト、&&、返したいデータが続きます。したがって、結果は次のようになります。

{} && {"status":200、 "serverTime":"2013年1月6日19:35:45EST"}

この非常に単純なGETリクエストを処理するためのコントローラーメソッドのコードは次のとおりです。

    @RequestMapping(value = "/test.json", method = RequestMethod.GET)
public ModelMap test(ModelMap m, HttpServletRequest request,
        Locale locale) {
    Date date = new Date();
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
            DateFormat.LONG, locale);

    String formattedDate = dateFormat.format(date);

    m.addAttribute("serverTime", formattedDate);
    m.addAttribute("status", 200);

    return m;
}

その余分な空の{}jsonオブジェクトがどこから来ているのかを私は一生理解できません。私の春の設定は次のようになります:

<beans:bean
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <beans:property name="mediaTypes">
        <beans:map>
            <beans:entry key="html" value="text/html" />
            <beans:entry key="json" value="application/json" />
        </beans:map>
    </beans:property>
    <beans:property name="defaultViews">
        <beans:list>
            <beans:bean
                class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                <beans:property name="prefixJson" value="true" />
            </beans:bean>
        </beans:list>
    </beans:property>
    <beans:property name="viewResolvers">
        <beans:list>
            <beans:bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
                <beans:property name="viewClass"
                    value="org.springframework.web.servlet.view.JstlView" />
                <beans:property name="prefix" value="/WEB-INF/views/" />
                <beans:property name="suffix" value=".jsp" />
            </beans:bean>
        </beans:list>
    </beans:property>

どんな助けでも大歓迎です。私はこれがなぜ起こっているのかを理解しようとして、日曜日に6時間を吹き飛ばしました。

4

2 に答える 2

4

MappingJacksonJsonViewjavadocから:

public void setPrefixJson(boolean prefixJson)

このビューによって出力されるJSONの前に「{}&&」を付ける必要があるかどうかを示します。デフォルトはfalseです。この方法でJSON文字列のプレフィックスを付けると、JSONハイジャックを防ぐことができます。プレフィックスは、文字列をスクリプトとして構文的に無効にするため、ハイジャックされることはありません。このプレフィックスはJSONの評価には影響しませんが、文字列に対してJSON検証を実行する場合は、プレフィックスを無視する必要があります。

では、prefixJsonをfalseに設定してみましたか?

<beans:bean
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <beans:property name="mediaTypes">
        <beans:map>
            <beans:entry key="html" value="text/html" />
            <beans:entry key="json" value="application/json" />
        </beans:map>
    </beans:property>
    <beans:property name="defaultViews">
        <beans:list>
            <beans:bean
                class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                <beans:property name="prefixJson" value="false" />
            </beans:bean>
        </beans:list>
    </beans:property>
    <beans:property name="viewResolvers">
        <beans:list>
            <beans:bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
                <beans:property name="viewClass"
                    value="org.springframework.web.servlet.view.JstlView" />
                <beans:property name="prefix" value="/WEB-INF/views/" />
                <beans:property name="suffix" value=".jsp" />
            </beans:bean>
        </beans:list>
    </beans:property>
于 2013-01-07T01:12:51.517 に答える
1

私はあなたが提供したコードであなたがしたのと同じものを受け取りました、そして私はあなたがしたのと同じ間違いをしました:)私はちょうど誤って@ResponseBodyコントローラーメソッドに注釈を追加するのを忘れました。

于 2013-02-07T10:11:46.043 に答える