Spring Boot查询特定会员记录接口故障排查求助
问题修复方案
你的接口无法获取数据主要有三个问题,以下是具体修复步骤:
1. Controller层:添加路径变量绑定注解
原Controller方法中,路径参数{memberno}没有和方法参数绑定,Spring无法正确获取URL中的会员编号值,导致传入DAO的参数可能是默认值0。修复后代码:
@GetMapping("/searchDataByMember/{memberno}") public List<MyData> searchDataByMember(@PathVariable int memberno) { List<MyData> dataList = myServiceDAO.findDataByMemberNo(memberno); return dataList; }
2. DAO层:修正SQL语句与参数传递
原DAO方法的SQL存在语法错误,且没有正确传递参数给JdbcTemplate,同时缺少只读事务注解:
@Repository public class MyServiceDAO { @Autowired JdbcTemplate jdbctemplate; @Transactional(readOnly = true) public List<MyData> findAll() { String sql = "SELECT * FROM demooutput"; return jdbctemplate.query(sql, new DataRowMapper()); } @Transactional(readOnly = true) public List<MyData> findDataByMemberNo(int memberno) { // 修正SQL占位符,正确传递参数 String sql = "SELECT member_no, dt, name, drnumber, docid, contact FROM demooutput where member_no = ?"; return jdbctemplate.query(sql, new Object[]{memberno}, new DataRowMapper()); } }
关键修复点说明:
- @PathVariable注解:必须添加该注解,Spring才能将URL路径中的
{memberno}值映射到方法参数上。 - SQL语法修正:原SQL中
memberno?是错误写法,正确的参数占位符是?,JdbcTemplate会自动替换为传入的参数值。 - 参数传递:调用
query方法时需要传入参数数组new Object[]{memberno},确保查询条件正确生效。 - @Transactional(readOnly = true):添加该注解保持和
findAll方法一致的事务配置,提升只读查询的性能。
内容的提问来源于stack exchange,提问作者Stella
相关产品推荐
相关产品推荐

