Spring Boot的GetMapping返回类型为List时无数据如何返回提示字符串
问题解决步骤
现有代码问题梳理
- Controller方法修饰符为
private,Spring无法完成接口映射,是导致报错的核心原因之一 - 空数据分支直接
return,相当于返回null,Spring默认会将该响应判定为404 - 方法返回值固定为
List<Library>,无法兼容空数据场景下的字符串提示返回 - 重复调用两次
libraryService.getBookByGenre(genre),会产生多余的数据库查询请求,性能低下
解决方案
推荐使用ResponseEntity包装响应结果,支持灵活返回不同类型的响应内容、自定义HTTP状态码:
import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import java.util.List; import java.util.HashMap; import java.util.Map; @GetMapping("/library/book/{genre}") public ResponseEntity<?> getBookByGenre(@PathVariable("genre") String genre) { // 先查询一次结果存储到变量,避免重复查询 List<Library> bookList = libraryService.getBookByGenre(genre); if (bookList.isEmpty()) { // 如需返回纯文本提示,HTTP状态码可按需求选择OK或NOT_FOUND return new ResponseEntity<>("No data found for this genre", HttpStatus.OK); // 如需返回结构化错误信息,可替换为下面的写法 /* Map<String, Object> errorRes = new HashMap<>(); errorRes.put("errorCode", 404); errorRes.put("errorMessage", "No data found for this genre"); return new ResponseEntity<>(errorRes, HttpStatus.NOT_FOUND); */ } return new ResponseEntity<>(bookList, HttpStatus.OK); }
效果验证
修改后调用接口:
- 存在对应genre的书籍时,正常返回书籍列表的JSON数据
- 无对应数据时,Postman会直接返回你需要的提示字符串,不会再抛出404异常
内容的提问来源于stack exchange,提问作者Atul
相关产品推荐
相关产品推荐

