Recenlty我有从服务器JSON响应波兰人物大问题。 我有这个简单的Ajax请求:
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我有字符编码过滤器。
任何帮助? 我的想法。
现在我100%肯定的是在服务器端和数据库encoidng从那里我从数据OK
尝试添加Content-Type头,如果它不存在INT你的回应:
response.setHeader("Content-Type", "application/json;charset=UTF-8")
获得肯定,从数据库中读取数据时使用UTF-8字符集。 杰克逊的编码默认为UTF-8,因此您的数据可能未使用UTF-8编码?!?
你从数据库中读取数据时使用何种编码? 也许ISO-8859-2?
试着改变你的反应类型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);
}
可以使用弹簧注释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
}
...
}