guli学苑 day6

guli学苑 day6谷粒学苑学习

今天解决了一个上传文件结果读取失败的bug(其实是自己学的不行导致的)

 // 通过swagger来检查当前行的一级分类是否存在 public EduSubject existOneSubject(EduSubjectService eduSubjectService,String name){ QueryWrapper wrapper = new QueryWrapper(); wrapper.eq("title",name); // 形参name就是当前一级分类的名称 wrapper.eq("parent_id","0");// 以为检查一级分类的parent_id必为零,所以不需要以形参来传递其数值 // 使用wrapper来查找数据库 EduSubject oneSubject = eduSubjectService.getOne(wrapper); return oneSubject; }

上面是一段在自己设置的监听器里面的一部分代码,目的是实现课程的多级分类,这里是对于一级分类的判断,二级分类的判断方法里面也有调用这个getOne方法。

当我使用swagger来上传文件测试的时候,swagger显示我上传文件成功

                           

然而IDEA里面报错了,报错内容如下

Caused by: java.lang.IllegalArgumentException: Invoked method public abstract java.lang.Object com.baomidou.mybatisplus.extension.service.IService.getOne(com.baomidou.mybatisplus.core.conditions.Wrapper,boolean) is no accessor method!

AI回复:这个错误信息是Java程序在运行时抛出的异常,具体来说是java.lang.IllegalArgumentException。异常信息表明在使用MyBatis-Plus框架时,调用了一个抽象方法getOne,但是这个方法并没有被正确地实现或配置为可访问的方法。

这说明你尝试调用的方法getOne是抽象的,意味着它没有具体的实现。IService是MyBatis-Plus提供的一个服务接口,它定义了一些通用的数据库操作方法,但这些方法需要在实现类中具体实现。

上面的错误信息是在说我使用的subjectService类对象里面的getOne方法是一个抽象方法,没有被实现就被我调用了。

于是经过了几个小时的排查,发现了错误点,是我的Controller类写错了代码

 错误的代码如下: @RestController @RequestMapping("/eduService/subject") @CrossOrigin //解决跨域问题 public class EduSubjectController { @Autowired private EduSubjectService eduSubjectService; @PostMapping("addSubject") public R addSubject(MultipartFile file,EduSubjectService subjectService){ // 用户上传的文件 // 添加课程分类 // 读取上传的文件,将文件内容读取出来 eduSubjectService.saveSubject(file, subjectService); return R.ok(); } } 

自己的理解:

// 我们在这里自动注入了一个Service,但是又在下面的方法内部使用了一个形参,并且将形参作为了Service层的方法返回了。
// 那么这里的自动注入的对象就没有起到了作用,实际上是使用这里的自动注入的对象,而我在下面自己创建了一个抽象类的对象。这就是报错的原因。
// 我使用了一个自己在方法内部创建的对象,而不是使用了由spring管理的自动注入了的对象,这里的对象是我在内部封装好的对象,使用了自动注入之后就会将我具体实现的实现类给注入,而不仅仅是一个Service层的抽象类,是一个ServiceImpl类

下面是修改之后正确实现目的的代码:

 @RestController @RequestMapping("/eduService/subject") @CrossOrigin public class EduSubjectController { @Autowired private EduSubjectService eduSubjectService; @PostMapping("addSubject") public R addSubject(MultipartFile file){ // 用户上传的文件 // 添加课程分类 // 读取上传的文件,将文件内容读取出来 eduSubjectService.saveSubject(file, eduSubjectService); return R.ok(); } } 

在这里调用了自动注入的实体类,用户只需要上传一个文件就好了,而不是上传好一个文件之后又要用户自己提供一个内部的对象(别人怎么知道你写的什么屎对象)

今天的文章 guli学苑 day6分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-05 15:51
下一篇 2025-01-05 15:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/102413.html