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

Spring Boot JPA调用findByEmail查询用户数据无返回结果问题求助

问题解答

核心问题

你在GET请求接口中使用@RequestBody接收参数是问题的根本原因:HTTP规范中GET请求没有定义请求体的语义,几乎所有HTTP客户端、代理、服务端都会默认忽略GET请求携带的请求体,导致后端无法接收到传入的email值,因此查询方法始终得不到正确的入参,返回结果不符合预期。

修复方案

方案1(推荐):用@RequestParam接收GET参数

修改Controller层代码,参数通过URL查询串传递,调用路径为/email?email=xxx@example.com:

@GetMapping(value = "email")
public User getByEmail(@RequestParam String email) {
    return userRepository.findByEmail(email);
}

方案2:改用POST请求接收请求体

如果业务需要必须通过请求体传参,将请求类型改为POST:

@PostMapping(value = "email")
public User getByEmail(@RequestBody String email) {
    return userRepository.findByEmail(email);
}

可选排查步骤

修改后如果仍有异常,可按以下顺序验证:

  • 打印接口接收到的email参数,确认参数是否正常传入
  • 开启JPA SQL执行日志,查看实际执行的SQL语句和绑定的参数是否符合预期,Spring Boot添加以下配置即可:
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
  • 将日志输出的SQL拿到数据库直接执行,确认库中是否存在对应email的用户记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:06:03