本文介绍: 如果使用自定义结果映射(ResultMap),请确保配置正确,并且没有产生冲突
问题原因:

这个错误通常出现在使用 MyBatis 查询结果映射时,MyBatis 无法找到适合的构造方法来将查询结果转换指定的 Java 对象。具体来说,错误信息 “No primary or single unique constructor found for interface java.util.List” 意味着 MyBatis 在将查询结果转换为 List 类型对象时遇到了问题,因为它无法找到一个合适的构造方法实例化 List 对象

而导致这些问题有以下几种原因:

  1. 错误的映射类型: 在 MyBatis 的映射文件中,可能将结果集映射为了 java.util.List 类型,但实际上 MyBatis 不能直接将结果集映射为 List 类型,因为 List 是一个接口,不能直接实例化。解决方法是将映射类型改为一个具体的 Java 类型,例如 com.yourpackage.YourEntityClass

  2. 缺少合适的构造方法 如果实体类(例如 YourEntityClass没有提供无参构造方法,同时 MyBatis 也无法找到合适的构造方法匹配查询结果的列,就会出现这个错误。

  3. 构造方法参数匹配问题 如果实体类中的构造方法参数和查询结果的列不匹配,也会导致这个错误。请确保实体类构造方法参数顺序和类型与查询结果的列一一对应。

  4. 定义结果映射问题: 如果使用了自定义的结果映射(ResultMap),请确保配置正确,并且没有产生冲突

解决方法

本人解决步骤

以上是网上搜集的一些解决办法,而我在经过问题排查发现是因为自己mapper层为加@PathVariable注解

 不添加注解导致错误的原因:

@PathVariable注解的作用在Controller层的方法中,参数注解 @PathVariable 用于将URL路径中的变量取出来,并绑定方法参数上。它告诉Spring MVC框架该参数值应该从URL路径中获取,而不是从请求请求体(Request Body)中获取

        当在Controller层的方法参数上使用 @PathVariable 注解时,Spring MVC会尝试根据URL路径的占位符名称匹配方法参数的名称,从而将URL路径中的变量值传递给方法参数。如果在使用 @PathVariable 注解时,没有在方法参数上添加注解,Spring MVC将无法正确识别URL路径中的变量,从而导致找不到匹配的方法签名,进而报错 “No primary or single unique constructor found for interface java.util.List”。

        举个例子这里我有一个URL路径 /delete/1,2,3,其中 1,2,3 是要删除的ids。在Controller层的方法中,如果没有使用 @PathVariable 注解,Spring MVC会默认请求体中获取参数,但请求体中并没有ids参数,所以就会报错找不到匹配的方法签名

        使用 @PathVariable 注解时,要确保注解的参数名与URL路径中的占位符名称一致,这样Spring MVC才能正确地将URL路径中的变量传递给方法参数。

原文地址:https://blog.csdn.net/LuoluoluoluoYan/article/details/132065315

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_14611.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注