2020新笔记:
前端封装JSON,有id,和一个list集合。首字母大写的情况
var cd = [];
for (var i = 0; i < selectArr.length; i++) {
var cd1 = {};
cd1["Isfz"] = false
cd1["Fseq"] = parseInt(data[0].fseq) + parseInt(i*1);
cd1["FOperNumber"] = parseInt(data[0].fopernumber) + parseInt(i*10);
cd1["FProcessId"] = selectArr[i].fid;
cd[i] = cd1;
}
var cdajax = {
"Id":document.getElementById("fid").value,
"Hlist":cd,
}
$.ajax({
url: '${path }/workJH/orderGongYiName',
type: 'post',
contentType : 'application/json;charset=UTF-8',
data: JSON.stringify(cdajax),
success: function (res) {}
});
或者这样封装也行
var objList = {};
objList.flowid = '123456';
objList.id = 'abcdefg';
objList.roleid = '654321';
var jsonbeans = [];
var input = $(".budget_tableone").find("input");
input.each(function () {
jsonbeans.push({"name":$(this).attr("name"),"value":$(this).val().replace(/,/g,'β')});
});
objList.jsonbeans = jsonbeans;
然后控制器
@RequestMapping(value = "/orderGongYiName", method = RequestMethod.POST)
@ResponseBody
public Object copyOrderGongYiName(@RequestBody(required = false) FM_FZ fz) {
。。。。。
}
问题来了,因为JSON首字母大写,导致映射不到实体类
于是就加了JsonProperty,即可。这里实体类千万不要大写,下面代码里是错误示范
@JsonIgnoreProperties(ignoreUnknown = true)
public class FM_FZ implements Serializable {
private static final long serialVersionUID = -7091879592386660617L;
/*
* 登录的TOKEN
*/
@JsonProperty(name ="Token")
private String Token;
/*
* 工序计划单ID
*/
@JsonProperty("Id")
private long Id;
/*
* 子单据体集合
*/
@JsonProperty(name ="Hlist")
private List Hlist;
}
结论:@JsonProperty是JSON转Java对象时候属性的名称,即Java当前变量的别名,系统会取json中对应key值放到该属性;@JSONField是对象转json时,产生的json对象的key值。所以遇到首字母大写的情况最好两个注解都加上
2019年旧笔记:
如果加了contentType :application/json,后台要有实体类接参。要带上@Requestbody
用String 也是可以接受的 。JSON要首字母小写
var checkStatus = table.checkStatus('listTableId'),
data = checkStatus.data;
let dataAry = checkStatus.data.map(e=>{return {'fid':e.fid,'fdetailid':e.fdetailid} });
let requestData = {
swtichID:a,
id:dataAry
}
$.ajax({
url: '${path }/workJH/updateJHStatus',
type: 'POST',
dataType:"json",//必须
contentType : 'application/json;charset=UTF-8',
data:JSON.stringify(requestData),
success: function (res) {
layer.msg(res)
如果是(int id,int age)前台不要加application/json
不懂可以参考 参考资料
关于 JAVA 框架-SSM-JSON 的提问 @Responsebody已经注解了,代表把对象自动转化成json格式。所以就没必要再手动转化成json了,控制器的返回值写Category,返回值也直接返回对象 同理,@Requestbody是将json格式的字符串,自动转化成pojo对应的对象 |
后台接收JSON,一直报415错误
因为web.xml没配置utf-8
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
如果不配置这个的话,就直接配置
com.fasterxml.jackson.core
jackson-annotations
2.9.5
com.fasterxml.jackson.core
jackson-core
2.9.5
com.fasterxml.jackson.core
jackson-databind
2.9.5
text/html;charset=UTF-8
application/json;charset=UTF-8
text/html;charset=UTF-8
application/json;charset=UTF-8
dataType值如果为'json',jquery就会把后端返回的字符串尝试通过JSON.parse()尝试解析为js对象。
dataType值如果为'text',结果弹出框直接显示后台返回的json字符串。
dataType值如果为'html',结果弹出框直接显示后台返回的json字符串。