1

@ResponseBodyアノテーションの使用中に文字エンコーディングの問題に直面しています。response.getWriter().write()メソッドを使用すると、ş、ö、ı などのトルコ語文字が表示されない問題はありません (それらの代わりにクエスチョン マークが表示されます) 。

Spring の CharacterEncodingFilterUTF-8 encodingで使用しています。

この問題を解決するにはどうすればよいですか? @ResponseBodyアノテーションで使用されるすべてのメソッドをresponse.getWriter().write()に変更する必要がありますか?

サンプル方法:

@RequestMapping(value = "/isScdValid.ajax")
    public @ResponseBody String isScdValid(HttpServletRequest request, HttpServletResponse response) throws IOException {
        boolean isValid = true; // for sample
        // continues...
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("isValid", isValid);
        if(isValid) {
            jsonObj.put("username", scd.getUsername());
            jsonObj.put("sessionUserId", scd.getUserId());

        }
    return jsonObj.toString(); // not encoding with UTF-8
//        response.getWriter().write(jsonObj.toString()); // works right
    }

これが私の文字エンコーディングフィルターです:

<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
</init-param>
<init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value>
</init-param>

<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

また、Tomcat に URIEncoding プロパティを追加しました。

    <Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" 
redirectPort="9443"
URIEncoding="UTF-8" compression="on" 
compressableMimeType="text/html,text/xml,text/javascript,text/json,text/css,text/plain,application/javascript,application/json,application/pdf"
/>
4

1 に答える 1

2

残念ながら、@ResponseBody アノテーションを使用してコントローラーで返される文字列のエンコーディングを設定するのは簡単な作業ではありません。同様の質問が表示されるはずです。

Spring 3.1 構成では、 Rossen Stoyanchev answerに示されているように、メッセージ コンバーターをセットアップする必要があります。

于 2012-08-24T11:33:10.273 に答える