@JsonProperty 注解的用法

做后端的各位对于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层就能正常收到入参了。

 

希望这篇文章能对你有帮助。

 

 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值