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

Spring Boot REST接口:返回List时设status为false及异常返回给Ajax

嗨,别担心,新手遇到问题太正常啦!我来帮你一步步解决这两个问题~

一、异常时返回友好信息给前端Ajax

Spring Boot里处理异常并返回给前端有几种常用方式,最推荐的是用全局异常处理器,这样不用在每个接口里写重复的异常处理逻辑:

  1. 先定义一个通用的响应体类,用来统一返回格式(不管成功还是失败都用这个结构,前端处理更统一):
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;
    }
}
  1. 编写全局异常处理器,用@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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:34:50