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

通过ID获取指定用户时报错,如何不使用Predicate实现单用户查询?

问题解决:修复/users/{id} 400错误并实现无Predicate的单用户查询

错误根源

你的400请求错误核心问题出在DataAccessObjectService的findOne方法里:

Predicate<? super UserInfo> predicate = user -> user.equals(id);

这里把UserInfo对象直接和int类型的id做相等判断——如果UserInfo没重写equals方法,默认的对象引用比较根本不会匹配到任何用户;即使重写了,这种跨类型的比较逻辑也不符合预期,最终触发异常导致400 Bad Request。


无Predicate的两种实现方式

方式1:传统循环遍历(直观易读)

直接遍历用户列表,逐个匹配id:

public UserInfo findOne(int id) {
    for (UserInfo user : users) {
        if (user.getId() == id) {
            return user;
        }
    }
    return null;
}

方式2:Stream直接过滤(不单独定义Predicate)

如果想用Stream API但不想单独声明Predicate变量,可以直接在filter方法内写判断逻辑:

public UserInfo findOne(int id) {
    return users.stream()
                .filter(user -> user.getId() == id)
                .findFirst()
                .orElse(null);
}

额外建议

建议给UserInfo类重写equals和hashCode方法(基于id字段),这样后续涉及对象比较的场景不会再出现逻辑错误,但当前场景下上面的两种实现已经能解决问题。

内容的提问来源于stack exchange,提问作者codelover

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:35:45