Spring boot + mybatis-plus 遇到 数据库字段 创建不规范 大驼峰 下划线 导致前端传参数 后端收不到参数 解决方案

Posted Json____

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring boot + mybatis-plus 遇到 数据库字段 创建不规范 大驼峰 下划线 导致前端传参数 后端收不到参数 解决方案相关的知识,希望对你有一定的参考价值。

最近使用springboot 连接了一个 sqlserver 数据库
由于数据库年数久远 ,建表字段不规范 大驼峰 下划线的字段名都有

但是 java 中 Spring boot + mybatis-plus 又严格按照小驼峰 格式 生成实体类
如果不是小驼峰格式
@Data 注解
get set 方法
在前端请求参数
使用这个类 来接取前端的参数 发现 获取不到 实体类的值

而且 这个实体类打印出来 请求参数就没接收到

如果手动一个一个的来修改字段成 小驼峰 就很烦

经过摸索 找到了 偷懒的方案

在默认使用 mybatis-plus 自动生成实体类
生成的类文件

问题:
这种根据数据库字段生成的 大驼峰命名规范 或者不规则命名规范 使用这种类 来接收 前端请求的参数
发现接收不到 前端的参数

通过摸索 找到了一个注解
@JsonProperty(“SIsClose”)

@JsonProperty的作用

@JsonProperty是作用在实体类的属性上的,把属性的名称序列化另一个名称,属性名称和@JsonProperty(“”)里面的名称是映射关系。比如数据库使用下划线命名字段user_id,但是在实体类属性命名是驼峰式的userId,通过在userId上添加@JsonProperty(“user_id”),在进行数据库查询返回给客户端的时候,可以控制输出的字段。

 简单的说,就是在给实体类属性名起别名,应用在不同的场合。

最终 得到的实体类

但是这个注解 如果数据库字段过多
一个一个的加 这个注解 也会加的头疼

最后修改 mybatis-plus 的 自动生成实体类的模板
加了一个

这样 以后 自动生成 实体类
就会 自动帮我加上这个注解
这样就很方便了

经过测试

命名不规范
导致使用 该类接 前端参数 会取不到 相对应的 数据
但是
如果使用 java set方法手动给这个类中的某个命名不规范字段 赋值
使用 get方法 是可以获取的
比如 new 这个对象 然后 get set 完全可以使用

所以我感觉 应该是 springboot 在接收前端参数 必须使用 小驼峰 命名规范

所以为了解决 接收参数 问题 在字段上加上 @JsonProperty(“SIsClose”) 注解 即可

查阅资料后
请求参数的 body 形式

1.遵照Java Api规范,使用驼峰命名格式
2. java类的属性要符合代码规范,使用驼峰属性

springboot 默认使用的是 jackson 组件,只需在命名不规范的属性上加上相应的注解即可进行映射
jackson 组件 : com.fasterxml.jackson.annotation.JsonProperty;

注意:这种没加 @RequestBody 的形式,使用 @JsonProperty 注解是不起作用的

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?

【中文标题】为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?【英文标题】:Why both spring-boot-starter-parent and spring-boot-starter-web are needed for Spring Boot application pom?为什么 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web? 【发布时间】:2020-05-23 01:10:46 【问题描述】:

我正在关注有关 Spring Boot 的视频教程(来自 javabrains.io)。示例项目的 pom 文件包含一个父块,其中groupIdorg.springframework.bootartifactIdspring-boot-starter-parent

此外,它还包含一个依赖块,其中groupIdorg.springframework.bootartifactIdspring-boot-starter-web

Q) 为什么我们的 pom.xml 中需要两个元素(即父元素和依赖元素)?

我想既然项目pom继承自spring-boot-starter-parent,那么所有的依赖也会自动继承。


示例项目pom.xml文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>io.javabrains.springbootquickstart</groupId>
    <artifactId>course-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Java Brains Course API</name>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>
</project>

【问题讨论】:

【参考方案1】:

如果您查看spring-boot-starter-parent pom 文件,您会看到它提供了默认属性和 maven 插件配置,而spring-boot-starter-web 提供了与 web 相关的 spring 依赖项,无需任何额外配置。此外,两个 starter 都继承自 spring-boot-dependencies,它定义了 spring 支持的依赖项列表。这允许您在构建配置中省略任何这些依赖项的版本。您可以阅读the official documentation了解更多信息。

总而言之,spring-boot-starter-parent 提供

默认 maven 插件设置 默认的 Maven 属性 依赖管理

spring-boot-starter-web 引入与网络相关的依赖项。

【讨论】:

以上是关于Spring boot + mybatis-plus 遇到 数据库字段 创建不规范 大驼峰 下划线 导致前端传参数 后端收不到参数 解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 学习例子

Spring Boot 2Spring Boot CLI

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》

spring-boot-quartz, 依赖spring-boot-parent

spring-boot系列:初试spring-boot