Skip to content

运行时报错:同一个类 不能强制转换:cannot be cast to

  • 报错信息:com.ccb.jawa.app.sys.model.UserInfo cannot be cast to com.ccb.jawa.app.sys.model.UserInfo

    img

  • 原因:项目中使用了spring-boot-devtools进行热部署,因为项目中的java文件随时可能会被修改,所以devtools为了热部署及时生效,这些java文件对于类会使用 org.springframework.boot.devtools.restart.classloader.RestartClassLoader 类加载器进行加载。如果同时代码中使用反射等技术(我此次遇到的问题就是MybatisFlex查询)使用到项目中的类时,就会使用到 AppClassLoader 进行加载,进而造成本该是一个类,使用不同类加载器而出现不同类型的情况

  • 解决方案

    • 方式一:将热部署的依赖注释掉,不使用它

      xml
      <!-- 热部署 -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
          <optional>true</optional>
      </dependency>
    • 在resource下创建META-INF/spring-devtools.properties

      properties
      restart.exclude.companycommonlibs=排除的jar包
      restart.include.projectcommon=包含的jar包  // 使用restartClassLoader加载

启动时报错:扫描不到 bean

  • 报错信息:No qualifying bean of type ‘XX’ available: expected at least 1 bean which qualifies as autowire candidate.
  • 解决办法
    • 在Mapper接口类上添加@Mapper注解
    • 在启动类上添加@MapperScan注解

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing

  • 检查是不是@GetMapping + @RequestBody的组合,因为GET请求不能用@RequestBody

  • 检查请求体是否为空,@RequestBody默认请求体不能为空,如果请求体为空时仍需要进入到接口中,则修改required参数为false

    java
    @PostMapping("/getOrderList")
    public void getOrderList(@RequestBody(required = false) OrderReqVO orderReqVO){
        if (orderReqVO == null){
        	orderReqVO = new OrderReqVO();
        }
    }

springboot3.4.4打包时lombok报错的问题

  • 问题原因:在使用start.spring.io创建springboot3.4.4项目时,自动在pom.xml中生成了maven-compiler-plugin的配置,但是该配置没有指定lombok的版本,所以可能导致依赖解析存在问题

  • 原配置

    xml
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <!-- 移除不必要的Lombok排除配置, -->
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • 解决方案:明确指定配置版本

    xml
    <build>
        <plugins>
            <plugin>
                <groupId>top.qnmdmyy.plugins</groupId>
                <artifactId>docker-image-builder</artifactId>
                <version>1.0-SNAPSHOT</version>
                <configuration>
                    <repositoryUrl>registry.cn-hangzhou.aliyuncs.com</repositoryUrl>
                    <repositoryNamespace>projects_space</repositoryNamespace>
                    <repositoryUsername>aliyun6967465092</repositoryUsername>
                    <repositoryPassword>zhl0619..</repositoryPassword>
                </configuration>
            </plugin>
    
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version> <!-- 明确指定插件版本 -->
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.18.32</version> <!-- 指定Lombok版本 -->
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <!-- 移除不必要的Lombok排除配置, -->
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • 参考文档

MIT版权,未经许可禁止任何形式的转载