[记录]对象类型报错的Ljava的L指的是List

本文探讨了在Struts2框架中使用ActionContext.getParameters()方法读取前端参数时遇到的问题,即返回值为Map<String,String[]>而非预期的Map<String,String>。文中还介绍了Struts2的拦截器如何简化参数处理。

在读取前端参数时,要转化成相应的数据类型。
有一次不知道为啥,(struct2框架下)通过ActionContext.getParameters ()获取的参数map对象,把value转化成String类型会报错,说对象为Ljava.lang.String。
上网查了查,才知道Ljava的L指的是List,即对象为一个String[]类型。
 
至今不了解为什么ActionContext.getParameters ()会返回Map<String , String[]>,而不是Map<String , String>。
 
PS:
在Struct2里,其实用不着这样读取前端的参数。
那时候自己不懂Struct2的拦截器已经可以实现类型的自动匹配(只要在相应的Action实现类声明相应参数名的变量)。
 
 
在使用 MyBatis-Plus 的 `@Select` 注解执行查询时,若出现 `NoSuchMethodError Ljava/lang/List` 错误,通常表明在运行时类路径中存在与编译时不一致的依赖版本,导致某个类的方法在运行时找不到。此类问题常见于 JSON 序列化库、ASM 字节码增强库或 Spring Boot 内部依赖的版本冲突 [^1]。 ### 依赖版本冲突导致的 `NoSuchMethodError` `NoSuchMethodError Ljava/lang/List` 表示某个方法期望返回 `List` 类型,但在运行时找不到该方法。这种情况通常与 `org.json.JSONObject` 或其他库中使用 `List` 返回值的方法有关。例如,某些 JSON 库的旧版本可能使用 `List` 返回值,而新版本可能改为使用其他类型(如 `Object` 或 `Collection`),从而导致运行时方法签名不匹配 [^4]。 解决此类问题的关键在于统一依赖版本并排除冲突。例如,若项目中引入了多个 JSON 库(如 `json`, `android-json`, `fastjson` 等),应检查 `pom.xml` 或 `build.gradle` 文件,并排除不需要的版本。 Maven 示例: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>com.vaadin.external.google</groupId> <artifactId>android-json</artifactId> </exclusion> </exclusions> </dependency> ``` ### ASM 字节码增强库版本冲突 另一种可能原因是 ASM 字节码增强库的版本冲突。若项目中同时引入了多个 ASM 版本(如 `asm-2.2.3.jar` 和 `asm.jar`),可能导致运行时加载错误的类,从而引发 `NoSuchMethodError`。此时应清理依赖库,确保仅保留一个兼容版本 [^3]。 ### Spring Boot 与 MyBatis-Plus 版本适配问题 若使用的是 Spring Boot 3.x,需确保 MyBatis-Plus 的版本兼容。Spring Boot 3.x 使用了 Jakarta EE 9 的包名(如 `jakarta.persistence`),而某些旧版本的 MyBatis-Plus 仍依赖 `javax`,这可能导致运行时类加载失败 。建议升级 MyBatis-Plus 至 3.5.x 或更高版本,以支持 Spring Boot 3.x。 Maven 示例: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> ``` ### 清理项目并重新构建 为确保所有依赖正确加载,建议执行项目清理与重新构建操作: Maven 命令: ```bash mvn clean install ``` Gradle 命令: ```bash ./gradlew clean build ``` ### 示例代码验证 确保 `@Select` 注解中的 SQL 语法正确,并与返回值类型匹配。例如: ```java @Mapper public interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM user WHERE age > #{age}") List<User> selectByAgeGreaterThan(@Param("age") int age); } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值