JPA可选参数查询触发IllegalArgumentException的问题求助
JPA可选参数查询触发IllegalArgumentException的问题求助
大家好,我现在遇到一个Spring JPA查询的棘手问题,折腾了好一阵都没搞明白,想请教下各位!
我的需求是根据两个可选参数(Integer类型的code对应实体里的one,String类型的name对应实体里的two)查询数据,这两个参数可能单独传、一起传或者都不传。我在仓库接口的方法参数上已经加了@Nullable,以为这样就能允许参数为null,结果只传其中一个参数调用时,还是抛出了参数不能为null的异常,实在摸不着头脑。
我的代码
控制器类
class SomeController { private SomeRepo someRepo; public SomeController(SomeRepo someRepo) { this.someRepo = someRepo; } @GetMapping("/some") public ResponseEntity<Iterable<SomeModel>> fetchData( @RequestParam(value="code", required=false) Integer one, @RequestParam(value="name", required=false) String two ) { Iterable<SomeModel> some; some = this.someRepo.findByOneLikeAndTwoLikeIgnoreCaseOrderByOneAsc(one, two); return ResponseEntity.ok(some); } }
仓库接口
public interface SomeRepo extends CrudRepository<SomeModel, Long> { Iterable<SomeModel> findByOneLikeAndTwoLikeIgnoreCaseOrderByOneAsc(@Nullable Integer one, @Nullable String two); }
测试请求与报错
我用curl只传name参数调用接口:
curl -X GET $HOST:$PORT/some?name=West
结果触发了以下错误:
2025-07-29T12:34:54.396-07:00 ERROR 1802042 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Value of parameter with name one must not be null] with root cause at org.springframework.data.relational.repository.query.ParameterMetadataProvider.checkNullIsAllowed(ParameterMetadataProvider.java:123) ~[spring-data-relational-3.1.0.jar:3.1.0] at org.springframework.data.relational.repository.query.ParameterMetadataProvider.next(ParameterMetadataProvider.java:88) ~[spring-data-relational-3.1.0.jar:3.1.0] at org.springframework.data.relational.repository.query.CriteriaFactory.createCriteria(CriteriaFactory.java:109) ~[spring-data-relational-3.1.0.jar:3.1.0]
我本来预期加了@Nullable后,当某个参数为null时,查询会自动忽略这个条件,只根据传入的参数过滤数据,但现在完全达不到预期效果。有没有大佬能帮我分析下问题出在哪,该怎么修改才能实现可选参数的动态查询?
内容来源于stack exchange
相关产品推荐
相关产品推荐

