Spring MVC中国語文字列の文字化けを回復するソリューション

2488 ワード

問題:Controller層の方法において、追加 @ReponseBodyコメント後、直接文字列に返信することができますが、返事の内容に中国語があると文字化けが発生しますか?
理由:
我々は文字列を返しますので、SpringはAnnotationMethodhandler Adapterを通じて対応するHttpMessage Coverterを探しに行きます。StringHttpMessage Coverterを見つけます。ソースを確認すると、このタイプのデフォルトのコードフォーマットは ISO-859-1、一部のソースコードは以下の通りです。
public class StringHttpMessageConverter extends AbstractHttpMessageConverter {

	public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
	private final Charset defaultCharset;
	private final List availableCharsets;
	private boolean writeAcceptCharset = true;

	/**
	 * A default constructor that uses {@code "ISO-8859-1"} as the default charset.
	 * @see #StringHttpMessageConverter(Charset)
	 */
	public StringHttpMessageConverter() {
		this(DEFAULT_CHARSET);
	}
	/**
	 * A constructor accepting a default charset to use if the requested content
	 * type does not specify one.
	 */
	public StringHttpMessageConverter(Charset defaultCharset) {
		super(new MediaType("text", "plain", defaultCharset), MediaType.ALL);
		this.defaultCharset = defaultCharset;
		this.availableCharsets = new ArrayList(Charset.availableCharsets().values());
	} 
ソリューション: 
(推奨)案一:
spring mvcプロファイルには、以下の構成が追加されています。

  
    
      
    
  
説明:実は指定です。 StringHttp Message Coverter類コンストラクタのパラメータ値はUTF-8であり、この方法はコードの侵入性が低く、苦労して永逸しますので、おすすめします。
シナリオ2:
はい、 @Request Mappingにproducesフィールドを追加しました。以下の通りです。
@Request Mapping(value=「/xxxt.do」、produces=「text/html;charset=UTF-8」)
シナリオ3:
オリジナルの方法を採用して、方法では、HttpServletResonseパラメータを増加し、HttpServletResonseオブジェクトから返信内容を出力し、以下のようにする。
@RequestMapping(value = "/xxxx.do")
@ResponseBody
public String fetchFlowPackage(@RequestParam(required = true) String param, HttpServletResponse response) {
	response.setHeader("Cache-Control", "no-cache");
	response.setContentType("text/html;charset=UTF-8");
	response.setCharacterEncoding("UTF-8");

	try {
		PrintWriter out = null;
		out = response.getWriter();
		out.write("     xxxx");
	} catch (IOException e) {
		e.printStackTrace();
	}
	return null;
}
ありがとうございます