You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:43:09