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

出现内部服务器错误求助:Spring Boot余额查询接口代码排查

排查Spring Boot内部服务器错误的问题点

我帮你梳理下代码里导致内部服务器错误的几个关键问题:

1. Controller路径变量名不匹配

你的@GetMapping路径是"/Transferabalance/{id}",但@PathVariable指定的是"Accbalance"——路径里的变量名是{id},但你要绑定的参数名是Accbalance,这会导致Spring无法正确解析请求路径里的参数,直接抛出参数绑定异常。

修复方案:
把路径里的变量名改成和@PathVariable一致,同时修正空值判断逻辑(Spring Data JPA的查询方法返回空列表而非null):

@GetMapping("/Transferabalance/{Accbalance}")
public List<Transaction> transfer(@PathVariable("Accbalance") long Accbalance) throws ResourceNotFoundException {
    List<Transaction> balance = Transservice.findByAccbalance(Accbalance);
    if(balance.isEmpty()) throw new ResourceNotFoundException("NO BALANCE");
    else return balance;
}

2. Repository层查询返回类型不匹配

你的findByAccbalance方法声明返回List<Transaction>,但native SQL写的是select ACCBALANCE from TRANSACTION——这个查询只返回单个数值字段,却试图映射成Transaction实体列表,这会触发严重的类型转换异常,是内部服务器错误的核心诱因。

修复方案:
如果需求是根据Accbalance值查询对应交易记录,正确的写法有两种:

  • 用Spring Data JPA自动生成查询(推荐,避免手写SQL错误):
public interface TransactionRepository extends CrudRepository<Transaction,Long> {
    List<Transaction> findByAccbalance(long Accbalance);
}
  • 手写native SQL(需保证查询结果能映射到实体):
@Query(value="select * from TRANSACTION where ACCBALANCE = ?1",nativeQuery = true)
List<Transaction> findByAccbalance(long Accbalance);

3. 额外排查建议

  • 检查Transaction实体类与数据库表TRANSACTION的字段映射是否一致,比如ACCBALANCE列在实体中对应的属性名是否正确,必要时用@Column注解明确指定列名。
  • 开启Spring Boot调试日志,在application.properties中添加logging.level.org.springframework=DEBUG,通过详细的错误栈信息快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:29:57