Spring MVCレスポンス文字化け
4270 ワード
spring 4.2.2
responsebody
・utf-8
文字化けの問題はずっと頭が痛い話題です.文字化けの原因は様々で、めちゃくちゃです.本文はSpring MVCに関するさまざまなケースを集めた集合として、更新を続けましょう.前提
1.Controllerで返却対象タイプSpring MVCがJson文字列に戻るには基本的に2つの方式があり、第一に、controllerの方法はJson形式の文字列に直接戻り、第二に、Form、List、Mapなどの順序付け可能なオブジェクトを返し、Spring統合Jacksonを配置してjson変換を行う.
2.StringHttp Message Coverterの配置コードを確認する(方式1)controllerが戻ってきたのは文字列であるため、SpringはレスポンスのoutputStreamにブラシを入れるだけでよい.しかし、ブラシを入れる時に使う具体的なコードは何ですか?StringHttp Message Coverterのソースコードを見ることができます
DEFAULT_CHARSET = Charset.forName("ISO-8859-1")
dispatcher-servlet.xmlでUTF-8に変更すればいいです.
3.MappingJackson 2 Http Message Coverterの配置コードを確認する(方式2)この変換類のデフォルトコードはUTF-8ですので、ここでは符号化問題が発生しないはずです.手動設定がこのような場合.
text/html;charset=UTF-8
application/json;charset=UTF-8
4.Spring APIが古いときdispatcher-servlet.xmlで使用された場合、3.1の前にAnnotationMethodhandler Adapterをデフォルトで注入した場合、3.1の後にRequest MappingHandler Adapterをデフォルトで注入します.使用していない場合は、手動で声明を追加する必要があります.例は以下の通りです.
text/html;charset=UTF-8
application/json;charset=UTF-8
text/plain; charset=UTF-8
text/html; charset=UTF-8
application/json; charset=UTF-8
application/json; charset=UTF-8
application/x-www-form-urlencoded; charset=UTF-8
文字化けシーン1controllerでの方法は以下のように定義されていますので、満足のいく形で使用しました.最終応答は文字化けです.解決策は2つあります.A.producesの値を{appication/json;charset=utf-8}に変更して、最も簡単で直感的ですが、すべての方法において修正します.B.dispatcher-servlet.xmlにStringHttpMessage Converterを追加する構成は無駄です.なぜなら、どうしても有効にならないということが分かります.これはproducesの中にはaplication/jsonしか設定されていないので、
StringHttpMessageConverter.getContentTypeCharset(MediaType contentType)
の参加中に、MediaTypeは永遠にappication/jsonだけあって、charsetを取得できません.上にconverterを追加する方式を採用し、producesの削除を確保することができます.このシーンは最終的に一つの問題だけを説明します.producesのMediaTypeはtype subtype(json)とcharset(utf-8)を含みます.
@RequestMapping(value = "queryIdCard", method = RequestMethod.POST, produces = {"application/json"})
@ResponseBody
public String queryIdCard(@RequestBody String idCardNo) {
MeResponse response = idCardBusiness.queryPersonInfo(idCardNo);
return JsonUtil.toJsonString(response);
}