以JSON 格式请求:前后端相同属性名,后端实体类属性映射居然为NULL!!!(已解决!!!)

太久了,回来写项目的时候就遇到以前没遇到的问题,查了一些资料,于是就写下来。(当然如果有更好的解决原因,欢迎评论区指正!!!)


一. 问题

前端通过json格式向后端发送请求

这里我直接赋值方便演示,正常都是动态赋值的。

后端通过 IDpeopleDTO 实体类来接收 (记得加上注解 @RequestBody )

后端IDpeopleDTO 实体类为:

Service层逻辑 首先会通过传来的用户名在数据库查找是否含有该用户?返回数据:抛出异常

然后处理包含对用户名 密码 禁用 的校验 一但有错就会抛出异常

 @Override
    public IDpeoPle selectIDpeopleByuserAndPassword(IDpeopleDTO iDpeoPle) {
        String idName=iDpeoPle.getIdName();
        String password=iDpeoPle.getPassword();
        IDpeoPle iDpeoPle1=  peopleLogMapper.selectIdpeopleByidName(idName);
        //校验用户名字
        if(iDpeoPle1==null){
            throw new LoginException(MessageContast.ACCOUNT_NOT_FOUND);
        }
        //校验密码
        String md5password = DigestUtils.md5DigestAsHex(password.getBytes());
        if(!md5password.equals(iDpeoPle1.getPassword())){
            throw new LoginException(MessageContast.PASSWORD_ERROR);
        }
        //校验账号状态
        if(iDpeoPle1.getStatus()==MessageContast.Status_NO){
            throw new LoginException(MessageContast.ACCOUNT_LOCKED);
        }


        return iDpeoPle1;
    }

数据库的信息为 

前端我指定IdName: 'hz', password: '123456', (密码后端通过md5将默认密码123456加密形式保存的 )

然后我们运行按正常逻辑前端会登录正常本且进入主界面 但是:

界面显示 

说明我们数据库根本没有这个用户 这个情况 我们一般要么就是断点调试 或者指定位置打印一些我们实体类信息 这里我们都试试

可以看到我们前端传来2个值其中只有password 接收到了 。这里我们前后端属性名都是一样的。我自己也调试前端了,发现前端也却是传入数据了,没有问题,但是就是后端这个IdName没有被映射到。。。。最后查了一些json库

二. 解决

(1) JSON 库

后端实体类的属性名是大写开头的(比如 我这里IdName),而前端发送的 JSON 属性名也是大写开头的(IdName),那么通常情况下,后端应当能够正确映射这个属性,前提是后端使用了正确的 JSON 库并且没有配置成忽略大小写。

然而,一些 JSON 库(比如 Jackson)在默认情况下会将 Java 类的字段名映射为小写开头的驼峰命名法(lowerCamelCase),这里我们后端属性名(IdName)虽然是首字母大写但是通过JSON请求传过来映射其实就已经变成小写了(IdName ->idName)所以导致我们前端(IdName)后端(idName)属性名不匹配,结果也自然映射不上。

一般 Java 的命名规范通常是类名、接口名等类型名称默认使用大驼峰命名法:

变量名、方法名等则默认使用小驼峰命名法:

(2)解决

      1.直接使用小驼峰命名在JSON 属性名首字母小写方法

后端调试可以看到已经成功接收到了

2.当然你也可以使用 @JsonProperty 注解来明确指定JSON属性名

这样后端也可以接收到 

三.最后

以后还是干脆规范点,直接前后端属性名 .数据库字段名 .小驼峰命名就行了(),也就没有这些问题了。也显得规范点!!!(学艺不精 有大佬这方面更详细的解释,欢迎评论区指正!!!)

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何政@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值