Spring Boot REST接口:返回List时设status为false及异常返回给Ajax
嗨,别担心,新手遇到问题太正常啦!我来帮你一步步解决这两个问题~
一、异常时返回友好信息给前端Ajax
Spring Boot里处理异常并返回给前端有几种常用方式,最推荐的是用全局异常处理器,这样不用在每个接口里写重复的异常处理逻辑:
- 先定义一个通用的响应体类,用来统一返回格式(不管成功还是失败都用这个结构,前端处理更统一):
public class ApiResponse<T> { private boolean status; // true表示成功,false表示失败 private String message; // 提示信息,异常时放错误描述 private T data; // 成功时返回的数据,异常时可以为null // 构造方法、getter、setter可自行生成 public ApiResponse(boolean status, String message, T data) { this.status = status; this.message = message; this.data = data; } }
- 编写全局异常处理器,用
@RestControllerAdvice和@ExceptionHandler注解:
@RestControllerAdvice public class GlobalExceptionHandler { // 捕获所有Exception类型的异常 @ExceptionHandler(Exception.class) public ResponseEntity<ApiResponse<Void>> handleException(Exception e) { ApiResponse<Void> response = new ApiResponse<>(false, "服务器发生错误:" + e.getMessage(), null); // 返回500状态码,也可根据异常类型返回对应HTTP状态码 return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR); } // 如果有自定义异常(比如ArticleNotFoundException),可以单独处理 @ExceptionHandler(ArticleNotFoundException.class) public ResponseEntity<ApiResponse<Void>> handleArticleNotFound(ArticleNotFoundException e) { ApiResponse<Void> response = new ApiResponse<>(false, e.getMessage(), null); return new ResponseEntity<>(response, HttpStatus.NOT_FOUND); } }
这样当你的接口抛出异常时,前端Ajax就能拿到包含status:false、错误信息的响应体,方便前端判断和提示用户。
二、返回List时设置status为false
你原来的接口直接返回List<Article>,这种方式没法携带status字段,所以需要把List包装到刚才定义的ApiResponse里:
修改你的接口方法:
@GetMapping("articles") public ResponseEntity<ApiResponse<List<Article>>> getAllArticles() { try { List<Article> list = articleService.getAllArticles(); // 业务上如果需要返回status:false,比如列表为空(可根据你的实际需求调整) if (list.isEmpty()) { ApiResponse<List<Article>> response = new ApiResponse<>(false, "暂无文章数据", null); return new ResponseEntity<>(response, HttpStatus.OK); } // 正常情况返回status:true ApiResponse<List<Article>> response = new ApiResponse<>(true, "查询成功", list); return new ResponseEntity<>(response, HttpStatus.OK); } catch (Exception e) { // 也可以直接抛异常交给全局处理器处理,或者自己构造响应 ApiResponse<List<Article>> response = new ApiResponse<>(false, "查询文章失败:" + e.getMessage(), null); return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR); } }
这样前端拿到的响应就是一个包含status、message、data的JSON对象,不管是成功还是需要返回status:false的场景,都能统一处理。
内容的提问来源于stack exchange,提问作者Pawan
相关产品推荐
相关产品推荐

