Spring REST API仅传必填参数却提示JPA查询参数数量不匹配如何解决?
问题原因
你的报错和接口的两个可选参数完全无关,问题出在JPA Repository的方法定义错误:
Spring Data JPA中,分页参数需要声明为Pageable类型,你当前写的PageRequest会被识别为普通的查询条件参数,JPA会尝试将它也拼接到WHERE查询语句中。你的查询逻辑只需要匹配referrerUserId一个字段,但是方法传入了2个参数(referrerUserId+PageRequest),所以触发了参数数量不匹配的异常。
解决方案
修改RewardEntityRepository中方法的第二个参数类型为Pageable即可,无需修改其他代码:
public interface RewardEntityRepository extends JpaRepository<RewardEntity, Long> { // 仅将第二个参数从PageRequest改为Pageable List<RewardEntity> findAllByReferrerUserId(Long referrerUserId, Pageable pageable); }
如果需要返回分页总条数、总页数等信息,也可以将返回值改为Page<RewardEntity>,更符合分页查询的使用习惯。
补充说明
你定义的GET接口参数逻辑完全正确,两个可选参数的默认值会正常生效,不传时默认按第0页、每页10条返回数据。
内容的提问来源于stack exchange,提问作者njari
相关产品推荐
相关产品推荐

