SpringBoot项目问题记录

本文记录了四个在SpringBoot项目中遇到的问题及解决方案:1. 序列化问题,通过添加get方法或修改实体类访问权限解决;2. MyBatis绑定异常,检查namespace、xml映射文件和mapper配置;3. 前端调用404,调整@RequestMapping和@ResponseBody注解使用;4. Map参数与xml映射不匹配,修正parameterType为'map'。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 问题一:No serializer found for class com.example.wjtest.entity.Labels and no properties discovered to create BeanSerializer

解决方式:

在实体类中添加属性的get方法,或者把实体类的访问权限由private修改为public。也就是说要保证该实体类的属性可以被获取到。

2、问题二:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

问题原因:

可能会有多种原因:要么就是xml的namespace配置是否正确,或者userMapper接口文件中的方法,在xml中没有对应;或者就是mybatis.mapper-locations的地址配置错误等。
总得来说就是3个原因:
第一,找不到文件(没有文件或mybatis.mapper-locations的路径配置错误);
mybatis.mapper-locations=classpath:xmlMapper/*/*.xml #检查该路径是否正确
第二,xml文件与接口文件没有正确映射;
第三,则是xml文件中与接口文件中的方法不一致。

解决方式:

分别比对问题原因中所说的三个原因,我本次出现该问题的原因就是mybatis.mapper-locations的路径配置错误,所以直接修改为正确的路径地址即可解决。

3、问题三:前端调用可以走到后端,却显示404的问题.

问题原因:

Spring是用@RequestMapping注解进行后端API映射的,而@ResponseBody 是用来把返回对象自动序列化成HttpResponse的。因此这里直接在Controller类上这样写注解是有问题的。
@RestController("/Mgserver")
public class UserController {}

解决方式:

将原来的
@RestController("/Mgserver")
修改为
@RestController
@RequestMapping("/Mgserver")

4、问题四:

2019-06-14 15:44:35.300 ERROR 12376 --- [nio-8888-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='age', mode=IN, javaType=class java.lang.Integer, jdbcType=INTEGER, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #3 with JdbcType INTEGER . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer] with root cause

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

问题原因:

接口的参数使用的是Map
int addUser(Map<String, Object> map);
在xml映射文件里面,parameterType又使用了对象:

在这里插入图片描述

解决方式:

将xml映射文件里面的parameterType修改为“map”即可。

在这里插入图片描述

附:个人在增删改查方法里面直接使用map而不用对象做参数的原因有二

1、可以精简多行代码;
对于新增用户的需求,若是使用对象做参数,代码如下:
        Users user  = new Users();
        String name = (String) map.get("name");
        Integer age = (Integer) map.get("age");
        String sex =(String) map.get("sex");
        String hobby =(String) map.get("hobby");
        user.setAge(age);
        user.setHobby(hobby);
        user.setName(name);
        user.setSex(sex);
        userMapper.addUser(user);
若是参数更多了,那岂不是代码行数多得更要吓人。
若是使用map作为参数,调用新增方法,一行代码即可搞定:
userMapper.addUser(map);
对比是不是就出来啦~
2、若对象字段有变化,也不需要修改方法。
第一点说的,或许可以用方法封装可以稍微减少一点代码量,但是要是实体类中要是增删改任何一个参数,都得要修改代码,而使用Map做参数,则只需要修改实体类和xml即可,并不需要修改方法中的代码。所以的确很方便哦~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值