1.排查前后端字段是否一致
前端有数据传入
function queryCenterAdd1() {
var paramMap = {
"SERIAL_NO":"sdsdad",
"APPLY_NO":"1",
};
$.ajax({
url: G3.cmdPath + "/rz/unite/add1",
type: 'post',
dataType : 'json',
contentType:'application/json',
data : JSON.stringify(paramMap),
success: function(data) {
G3.alert("提示", '请求成功' + data);
},
error: function(error) {
G3.alert("提示", '请求失败' + error);
}
})
}
在网页开发者模式的network中有传入的的数据
但是后端接收的实体类对应字段的值为null
跟实体类中的字段进行比较
前端的字段与后端实体类中的是一致的,那么问题应该出在@RequestBody注解和Getter方法上了
2.排查@RequestBody的Getter方法与@Data生成的Getter方法是否一致
1)这里提一点注意事项@RequestBody接受参数的值是通过idea生成的Getter方法进行参数获取,即在实体类通过手动生成的Getter方法
而通过@Data生成的Getter在一些情况下与idea本身生成的Getter是存在差异的
例如:
private String bENT_NAME;
通过@Data生成的为getBENT_NAME();
public int addUniteTask1(@RequestBody UniteTask uniteTask1) {
uniteTask1.getSERIAL_NO();
uniteTask1.getBENT_NAME();
return 1;
}
而idea手动生成的Getter为getbENT_NAME()
public String getbENT_NAME() {
return bENT_NAME;
}
这种情况也会导致参数的获取值为null
2)实际排查Getter方法问题
@Data生成方法getSERIAL_NO();
public int addUniteTask1(@RequestBody UniteTask uniteTask1) {
uniteTask1.getSERIAL_NO();
return 1;
}
idea生成方法getSERIAL_NO();
public String getSERIAL_NO() {
return SERIAL_NO;
}
方法一致,那就只能是实体类中的字段名导致的了
3.修改实体类的字段名,将带有下划线的格式修改为驼峰格式
原本为直接与数据库的字段对应,直接使用带有下划线的字段名称
@Id
private String SERIAL_NO; // 业务主键,业务新增、更新、删除的唯一标识
private String APPLY_NO; // 网上申请号
修改后
@Id
@Column(name = "SERIAL_NO")
private String serialNo; // 业务主键,业务新增、更新、删除的唯一标识
@Column(name = "APPLY_NO")
private String applyNo; // 网上申请号
4.结果测试
1)修改后最好检查以下Getter方法是否一致,或者直接使用手动生成的Getter方法,手动生成的Getter方法会覆盖@Data注解的Getter方法
测试类的代码:
@RequestMapping({"/add1"})
@ResponseBody
public int addUniteTask1(@RequestBody UniteTask uniteTask1) {
uniteTask1.getSerialNo();
uniteTask1.getApplyNo();
return 1;
}
2)前端的字段也要进行修改,与后端实体类的字段一致
修改后js前端代码
function queryCenterAdd1() {
var paramMap = {
"serialNo":"sdsdad",
"applyNo":"1",
};
$.ajax({
url: G3.cmdPath + "/rz/unite/add1",
type: 'post',
dataType : 'json',
contentType:'application/json',
data : JSON.stringify(paramMap),
success: function(data) {
G3.alert("提示", '请求成功' + data);
},
error: function(error) {
G3.alert("提示", '请求失败' + error);
}
})
}
3)测试流程
请求的字段已经变为修改后的字段名,若没有变为修改后的字段名重新运行以下工程,并刷新以下页面,确保工程为最新状态
后端数据
可以看到数据已经传输进来了,问题解决
5.总结
1)实体类类型,无论是数据库实体类还是非数据库实体类,不要出现直接使用下划线的字段名,最好使用驼峰格式命名
2)gGetter、Setter方法使用@Data注解时,一定要注意是否与idea本身生成的Getter、Setter方法是否一致,若可能,最好直接在实体类中手动生成对应的Getter、Setter等方法,避免出现歧义
3)前后端的数据字段名称一定要保持一致