前言:
在项目开发过程中,经常使用Ajax来请求和接收数据,通常为了方便,尤其是在数据较多的时候,我们会把Ajax中的data对象封装成json格式便于传输,但是在SpringMVC中却接收不到请求或者接收到的参数是被urlencode编码后的。
出现此问题,一般情况下都是前端和后端没有约束好发送或接收的数据类型和编码的原因。本文章将作为一个最基础的示例留作备忘。
前端Ajax示例:
$.ajax({
type : "POST",
url : "../../sys/saveCode.do",
contentType: "application/json; charset=utf-8",
data : JSON.stringify(data),
success : function(data) {
//成功
},
error : function(e) {
//失败
}
})
代码解读:
Ajax请求中指定contentType属性的值为: "application/json; charset=utf-8"。
application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。
Spring示例:
@RequestMapping(value = "/saveCode", method = RequestMethod.POST)
public @ResponseBody String saveCode(HttpServletRequest request,@RequestBody String jsons) {
Map<String, Object> mapdata = JSONObject.fromObject(jsons);
System.out.println(mapdata);
return null;
}
代码解读:
后端java中,@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型,或者接收一个entity