2012-09-06 129 views
1

Recenlty我在服務器的JSON響應波蘭字符有大問題。我有這個簡單的Ajax請求:在服務器端春季mvc jquery ajax響應作爲json編碼問題

jQuery.ajax("/GetSimpleRuleList", 
    { 
     type:"GET", 
     responseType:"application/json;charset=utf-8", 
     contentType:"application/json;charset=utf-8", 
     cache:false 
    }).done(function (data) 
    { 
     console.log(data); 
     //nevermind here 
    }); 

和適當的控制器:

@RequestMapping(value = "/GetSimpleRuleList", method = RequestMethod.GET) 
public 
@ResponseBody 
String getRuleList(ServletResponse response) 
{ 
    //magically getting my list here 
    response.setCharacterEncoding("UTF-8"); 
    return //Using JACKSON ObjectWriter here 
} 

現在我100%肯定我從哪裏拿數據是從上encoidng服務器端和數據庫好吧,沒問題。 但是當涉及到讀響應從服務器,它是:

??? 

代替波蘭語炭等:

ąćź 

而且接收來自服務器的響應時,在發送用數據的請求是它不僅不能正確編碼。

在我的web.xml中,我已經過濾了字符編碼。

對此有何幫助?我沒有想法。

+0

確切重複http://stackoverflow.com/questions/12105617/spring-3-1-mvc-getting-character-encoding-error-while-using-responsebody-anno –

回答

1

現在我100%肯定是在服務器端和數據庫encoidng從那裏我從數據OK

嘗試添加Content-Type頭,如果它不存在INT您的迴應:

response.setHeader("Content-Type", "application/json;charset=UTF-8") 

確保在從數據庫中讀取時使用UTF-8字符集。傑克遜的編碼默認爲UTF-8,因此您的數據可能不會使用UTF-8進行編碼?!?

從數據庫讀取時使用什麼編碼?也許ISO-8859-2?

1

試着改變你的反應類型org.springframework.http.ResponseEntity

public ResponseEntity<String> getRuleList(){ 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    responseHeaders.add("Content-Type", "application/json; charset=utf-8"); 
    responseHeaders.setCacheControl("no-cache, max-age=0"); 
    String allyourjson = "yourjsongoeshere"; 
    return new ResponseEntity<String>(allyourjson, responseHeaders, HttpStatus.OK); 
} 
0

你可以使用Spring註解上述控制器類RequestMapping爲receveing 應用/ JSON的;在所有響應UTF-8

@Controller 
@RequestMapping(produces = {"application/json; charset=UTF-8","*/*;charset=UTF-8"}) 
public class MyController{ 
... 
@RequestMapping(value = "/GetSimpleRuleList", method = RequestMethod.GET) 
public 
@ResponseBody 
String getRuleList(ServletResponse response) 
{ 
    //magically getting my list here 
    response.setCharacterEncoding("UTF-8"); 
    return //Using JACKSON ObjectWriter here 
} 
... 
}