问题整理【2024-04-10】

news/2024/12/22 13:04:43/

一、根据实体类自动生成数据表字段 (actable框架)

1.1、源由

一直很疑惑,xxx项目是怎么做到根据实体类生成/更新数据表字段的(猜测是根据xxx注解,然后使用mysql的DDL操作表的结构)

后来在同事的帮助下,发现整个过程是通过actable框架实现的。

1.2、具体实现

引入相应的依赖:

<dependency><groupId>com.gitee.sunchenbin.mybatis.actable</groupId><artifactId>mybatis-enhance-actable</artifactId><version>${actable.version}</version><exclusions><exclusion><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId></exclusion></exclusions>
</dependency><!-- 如需使用tk.mybatis同时需要依赖该jar包,之前1.3.1和1.3.0版本默认依赖了,但是有的小伙伴使用mybatis-plus会有冲突,所以这一版本默认不依赖,如需使用自行依赖即可 -->
<dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.5</version>
</dependency>

配置文件中配置对于actable支持的配置

    actable.table.auto=updateactable.model.pack=com.xxx.store.model(ps:要扫描的用于建表做依据的model目录)actable.database.type=mysql本系统提供四种模式:2.1 当actable.table.auto=create时,系统启动后,会将所有的表删除掉,然后根据model中配置的结构重新建表,该操作会破坏原有数据。2.2 当actable.table.auto=update时,系统会自动判断哪些表是新建的,哪些字段要修改类型等,哪些字段要删除,哪些字段要新增,该操作不会破坏原有数据。2.3 当actable.table.auto=none时,系统不做任何处理。2.4 当actable.table.auto=add,新增表/新增字段/新增索引/新增唯一约束的功能,不做做修改和删除 (只在版本1.0.9.RELEASE及以上支持)。2.5 actable.model.pack这个配置是用来配置要扫描的用于创建表的对象的包名2.6 actable.database.type这个是用来区别数据库的,预计会支持这四种数据库mysql/oracle/sqlserver/postgresql,但目前仅支持mysql

1.3、详情使用可参考官方文档

https://www.yuque.com/sunchenbin/actable/nfz097

二、jackson序列化问题

2.1、源由

今天创建了一个VO类,然后里面没有写任何东西,并且将该对象以json数据返回给前端,然后调接口测试,发现报错了。

报错内容:

全局异常信息 ex=Type definition error: [simple type, class com.hscloud.hs.ward.model.vo.MedRecordPageVo]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.hscloud.hs.ward.model.vo.MedRecordPageVo and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.pig4cloud.pigx.common.core.util.R["data"]->com.baomidou.mybatisplus.extension.plugins.pagination.Page["records"]->java.util.ArrayList[0])

2.2、原因分析

首先我们看下控制器,其返回的对象是R<Page>

public R<Page<MedRecordPageVo>> MedRecordpage(@Validated MedRecordPageDto input) {return R.ok(medRecordService.MedRecordpage(input));
}

并且由于加了@RestController注解,其中@ResponseBody,会将我们返回的数据以json的数据返回出去。

此时如果MedRecordPageVo对象中的内容是空的话,因为 Jackson 默认情况下只序列化具有 getter 方法的属性,由于 Jackson 序列化器无法找到适合序列化 MedRecordPageVo 类的方法而引起报错。

2.3、解决

  • 可以通过添加 getter 方法或者在实体类中添加 @Data 注解(如果使用 Lombok 的话),来确保 Jackson 能够正确地序列化对象。

  • 或者通过在 Spring Boot 应用程序的配置文件(例如 application.propertiesapplication.yml)中添加以下配置来禁用 Jackson 的 FAIL_ON_EMPTY_BEANS 特性(spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false 是 Spring Boot 应用程序中的一个属性配置,用于配置 Jackson 序列化器的行为。具体来说,这个配置的作用是告诉 Jackson 在序列化对象时,如果遇到空对象(即对象中的所有属性都为 null),是否抛出异常,默认为true)

    propertiesCopy Codespring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
    
  • 或者直接通过创建一个配置类,去控制

    javaCopy Codeimport org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;@Configuration
    public class JacksonConfig {@Beanpublic Jackson2ObjectMapperBuilder jacksonBuilder() {Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();builder.failOnEmptyBeans(false);return builder;}
    }
    

三、people who change the files in the active changelist also change

3.1、源由

在使用IDEA内置的Git的时候,在提交记录管理界面中出现了people who change the files in the active changelist also change

3.2、解决

用于提示作用,相关的解释如下所示:

people who change the files in the active changelist also change
这个列表的意思是:default changelist中修改的内容(用A表示),在提交历史(git history)中发现(A,B)是一起提交修改的,AS 认为B内容你也有可能需要修改,如是把B的内容放在了people who change the files in the active changelist also change中;这样可以提醒你可能存在的关联修改类。

3.3、相关文档

https://blog.csdn.net/kingyc123456789/article/details/107247184

四、is not an enclosing class

4.1、在类中

类定义方式:

public class A {// xxxpublic class B {// yyy}
}

类创建方式:

A.B ab = new A.B()

4.2、原因

若要创建内部类的实例,需要有外部类的实例才行。

4.3、解决方法

方式一:先创建外部类,再创建内部类

A.B ab = new A().new B();

方式二:将内部类设置为静态的

类定义方式:

public class A {// xxxpublic static class B {// yyy}
}

类创建方式:

A.B ab = new A.B()

http://www.ppmy.cn/news/1413666.html

相关文章

javascript密码验证规则,数字、字母、特殊符号两种以上

在验证密码复杂的正则表达试中&#xff0c;几位码友有发布过从两种字符里选两种的&#xff0c;从三种字符里选有三种的。 今天我提一个从三种里选两种的。有喜欢的朋友拿去用。 密码须包含数字、字母、特殊符号两种以上&#xff0c;且不少于8位&#xff0c;不多于32位。 pass…

20240410解决OK3588-C的核心板刷机之后无法启动的问题

20240410解决OK3588-C的核心板刷机之后无法启动的问题 2024/4/10 19:38 1、编译OK3588的LINUX/Buildroot&#xff1f;forlinxubuntu: ~/3588/OK3588_Linux_fs$ sudo ./build.sh BoardConfig-linuxfs-ok3588.mk 2、进行全编译 forlinxubuntu: ~/3588/OK3588_Linux_fs$ sudo ./bu…

ETLCloud结合kafka的数据集成

一、ETLCloud中实时数据集成的使用 在ETLCloud中数据集成有两种方式&#xff0c;一种是离线数据集成&#xff0c;另一种便是我们今天所要介绍的实时数据集成了&#xff0c;两者的区别从名字便可以得知&#xff0c;前者处理的数据是离线的没有时效性的&#xff0c;后者的数据是…

Spring和Spring MVC和MyBatis面试题

面试题1&#xff1a;请简述Spring、Spring MVC和MyBatis在整合开发中的作用&#xff1f; 答案&#xff1a; Spring&#xff1a;是一个轻量级的控制反转&#xff08;IoC&#xff09;和面向切面&#xff08;AOP&#xff09;的容器框架。它提供了强大的依赖注入功能&#xff0c;…

Spring与SpringBoot的区别

Spring是一个开源的Java应用程序框架&#xff0c;旨在简化企业级Java应用程序的开发。它提供了一个轻量级的容器&#xff0c;用于管理应用程序中的各个组件&#xff08;如依赖注入、AOP等&#xff09;&#xff0c;并提供了丰富的功能和模块&#xff0c;用于处理数据库访问、事务…

mapbox 工作问题暂时记录

mapbox 工作问题暂时记录 mapbox样式修改1.2.3.4. mapbox样式修改 1. mapbox直接用class名无法修改样式, 可以添加 :deep 来修改样式 2. map.value.getStyle().layers这行代码可以获取页面中所有图层,可以判断图层id来做相应操作 3. map.value.setLayoutProperty(layer.id…

Qt C++ 实现文件监视源码

以下是使用Qt C++实现文件监视的一个简单示例代码: #include <QCoreApplication> #include <QFileSystemWatcher> #include <QDebug>int main(int argc, char *argv[

练习题(2024/4/10)

1. 删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元…