Spring Data JPA多路径参数查询仅返回首个结果问题求助
问题原因及解决方案
核心问题
你的Controller层中,第二个参数data1没有添加@PathVariable注解,Spring无法从URL路径中读取这个参数的值,导致调用Repository方法时data1实际为null。SQL执行时IN (:data0,:data1)就变成了IN ('2022-11-24', null),自然只会返回第一个参数对应的数据。
修正后的Controller代码
@RequestMapping(value="/agenda/clone/{data0}/{data1}", method=RequestMethod.GET) public @ResponseBody List<AgendaModel> clone(@PathVariable String data0, @PathVariable String data1){ return actions.find(data0,data1); }
可选优化建议
如果后续可能需要支持更多日期查询,可以把Repository方法的参数改成List,提升扩展性:
Repository层优化后代码
@Query(value = "SELECT * FROM agenda WHERE substring(data,1,10) IN (:dates)", nativeQuery = true) List<AgendaModel> find(@Param("dates") List<String> dates);
对应Controller层调整
@RequestMapping(value="/agenda/clone/{dates}", method=RequestMethod.GET) public @ResponseBody List<AgendaModel> clone(@PathVariable List<String> dates){ return actions.find(dates); }
访问时可以用类似/agenda/clone/2022-11-24,2022-11-25的路径(Spring会自动把逗号分隔的路径参数转成List)。
内容的提问来源于stack exchange,提问作者Luis Rotoly
相关产品推荐
相关产品推荐

