若依框架PostMapping自定义语句查询分页失效,报错:java.lang.UnsupportedOperationException

目录

一、问题背景

二、问题分析

三、BUG定位

四、解决方案

五、BUG总结


一、问题背景

需要开发一个页面通用查询功能,在后端生成查询语句,所有表单数据页面调用这个接口可以实现通用查询,但因为参数比较复杂(参数实体里面含另一个List实体),GetMapping无法正常解析所以该用PostMapping,但是发现分页失效。

二、问题分析

若依框架的分页失效目前知道三种原因:分页参数没生效、开启分页配置后不止一个查询语句、查询语句不支持若依框架的分页工具(例如JdbcTemplate

坑一:查询表单的接口使用的PostMapping

坑二:查询使用的JdbcTemplateMyBatis

三、BUG定位

1、确保开启分页功能(PageUtils.startPage())的代码后只有一个接口结果的查询语句

2、查看分页参数有无生效:

点进PageUtils.startPage()方法,打断点调试发现分页参数为null,若依框架获取分页参数是解析request请求(URL)获取的分页参数,GetMapping是会自动解析URL参数所以可以正常在URL中获取分页参数

3、查看查询语句是否支持分页

为了只测试查询是否支持分页,在查询之前写死分页参数PageUtils.startPage(1,1);

最初版本使用的jdbcTemplate.queryForList方法查询结果集数据,发现分页不生效

四、解决方案

1、因为查询的参数比较复杂,里面嵌套了一个List所以改为请求方式PostMapping

可以修改PostMappingGetMapping,把原本的List参数改为String类型,后端再转换为List,这样就可以正常解析URL中的分页参数

2、在PostMapping的接口中,在参数实体里面加上分页参数,达到可以正常接收分页参数的目的

3、把JdbcTemplate查询方式改为Mybatis查询(必须)

4、报错java.lang.UnsupportedOperationException原因为,查询时resultType="java.util.List",改为resultType="java.util.Map"就可以了

五、BUG总结

1、正常查询接口都是GetMapping,所以若依框架的分页功能只解析URL中的分页参数,如果特殊情况使用到PostMapping就要自己定义参数去接这两个分页参数。

2、想要解决BUG就是一步一步往上看就好了,发现哪里的问题就解决哪里


本人纯Java菜鸟,欢迎各位大佬补充纠正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值