做后端的各位对于JSON格式传参肯定不陌生吧?
咱先看一组大家常用的入参:【ps:csdn博客的代码块不支持JSON?待改进嗷】
{
"loginNo": "admin",
"debugEndDate" : "2050-7-20 18:25:22",
"debugStartDate" : "2010-7-1 09:25:22",
"type" : "1"
}
那么对于这么一组入参,后端获取的方法特别简单:
1、构建对应的实体类,个人这边建议使用IDEA配套的JSON格式化插件(此处自行百度)
方法:新建一个实体类,右键=》Generate
选择GsonFormat
粘入我们的入参,点击OK即可
这边参数默认都是String类型,有特殊类型自己在setting中更改即可。
这边可以看到实体类已经构建完成了,为了获得参数我们只需要在CONTROLLER层的入参中添加@RequsetBody标签即可
但是如果是以下这种情况呢?
{
"ROOT":{
"BODY":{
"TEST_INFO":{
"SYS_ID":"156",
"SYS_NAME":"220000"
}
}
}
}
我们先来看看直接使用插件生成会是什么样子的:
public class json {
/**
* ROOT : {"BODY":{"TEST_INFO":{"SYS_ID":"156","SYS_NAME":"220000"}}}
*/
private ROOTBean ROOT;
public ROOTBean getROOT() {
return ROOT;
}
public void setROOT(ROOTBean ROOT) {
this.ROOT = ROOT;
}
public static class ROOTBean {
/**
* BODY : {"TEST_INFO":{"SYS_ID":"156","SYS_NAME":"220000"}}
*/
private BODYBean BODY;
public BODYBean getBODY() {
return BODY;
}
public void setBODY(BODYBean BODY) {
this.BODY = BODY;
}
public static class BODYBean {
/**
* TEST_INFO : {"SYS_ID":"156","SYS_NAME":"220000"}
*/
private TESTINFOBean TEST_INFO;
public TESTINFOBean getTEST_INFO() {
return TEST_INFO;
}
public void setTEST_INFO(TESTINFOBean TEST_INFO) {
this.TEST_INFO = TEST_INFO;
}
public static class TESTINFOBean {
/**
* SYS_ID : 156
* SYS_NAME : 220000
*/
private String SYS_ID;
private String SYS_NAME;
public String getSYS_ID() {
return SYS_ID;
}
public void setSYS_ID(String SYS_ID) {
this.SYS_ID = SYS_ID;
}
public String getSYS_NAME() {
return SYS_NAME;
}
public void setSYS_NAME(String SYS_NAME) {
this.SYS_NAME = SYS_NAME;
}
}
}
}
}
看起来非常的合理,但是当你任按照之前的,在CONTROLLER层的的入参前添加@RequestBody的做法,你会发现你获取不到入参,返回的都是NULL;这块内容我初步判断是与入参的大写相关,具体原因不清楚,有了解的朋友欢迎在评论里面讨论。
既然发现了找个问题那么我们就想办法解决找个问题,我们就按照Java编码规范来规范入参,将ROOT改为 root ,SYS_ID改为sysId;
但是与前端的入参规范已经定下来了,我们在这边更改势必需要前端更改入参名称。这时就需要使用@JsonProperty 注解来改变入参名称,基本上用法如下所示:
// 在每个变量名前添加如下注释
@JsonProperty(value = "SYS_ID")
private String sysID;
这样我们的CONTROLLER层就能正常收到入参了。
希望这篇文章能对你有帮助。