1.controller类
@RestController
public class qudaoController {
@PostMapping(value = "/check")
public ResultData check(@RequestBody CommitSure commitSure) {
return null;
}
}
2.实体类
@Data
public class CommitSure {
private String RequestId;
private String Version;
3.用postman发送post请求,debug controll中实体类的数据为null
{
"RequestID": "xxx555",
"Version": "1.0.0"
}
CommitSure commitSure得到参数都为null
4.网上搜了很多
1.需要添加@RequestBody(required = false);设置参数为不必须,只能解决为空报错。
2.设置请求体。conten-type
@PostMapping(value = "/check",produces = "application/json;charset=utf-8");也没有解决问题
5.@responseBody默认json转换
1.请求的json数据会存到request的body中,进入controlle
依据是:
@PostMapping(value = "/check")
public ResultData check(@RequestBody JSONObject json) {
CommitSure commitSure=JSON.toJavaObject(json, CommitSure.class)
//这样可以得到将前端的数据存入CommitSure实体类。
return null;
}
2.那就说明@springBody在将json封装成实体类出现错误;
出错误原因:
获取"RequestId": "xxx555",@springBody获取要接受的实体类属性RequestId并统一转为驼峰式requestId,
然后去json中获取key为requestId的值,此时为null;调用实体类中setRequest()方法为实体类赋值。
3.解决思路:
方式一:1.json传递数据的key统一改为驼峰式
{
"requerstID": "xxx555",
"version": "1.0.0v"
}
方式二:2.告诉解析器要去查找的json的key的值
//利用@JsonProperty在实体类属性上指定,对应json的key值
@Data
public class CommitSure {
@JsonProperty(“RequestId”)
private String RequestId;
@JsonProperty(“Version”)
private String Version;
}