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

如何获取Spring Boot后端HTTP状态码并在前端触发对应toast提示

问题根因

你目前遇到错误toast无法触发的问题,常见原因有3个:

  • 手动拼接JSON字符串的方式极易产生非法JSON,当raw[0]/raw[1]包含双引号、换行等特殊字符时,请求还未发出就会前端报错,不会进入任何回调逻辑
  • 后端异常未被预期捕获,或是项目中存在全局异常处理器@RestControllerAdvice拦截了你的ResponseEntity,将非2xx状态码强制修改为200
  • 测试时未触发后端异常分支,所有请求都走了正常返回200的逻辑

修复方案

1. 优化前端请求逻辑

删除手动拼接JSON的代码,直接构造JS对象避免格式错误;同时配置observe: 'response'直接获取原生HTTP状态码,不需要依赖响应体返回的状态值:

postcompetenze(raw: any){
    // 直接构造对象,避免手动拼接JSON出错
    const obj = {
        id: 0,
        nome: raw[0],
        descrizione: raw[1]
    };
    // 配置observe: 'response'获取完整响应对象,直接读取原生状态码
    this.http.post('http://localhost:8080/postcompetenza', obj, {observe: 'response'})
    .subscribe({
        next: (resp) => {
            console.log("响应状态码:", resp.status);
            // 你需要把状态存入res变量的话,直接在这里赋值即可,不要在subscribe外同步赋值
            // this.res = resp.status;
            if(resp.status === 200){
                this.toastr.success("dipendente inserito correttamente","SUCCESSO");
            }else{
                this.toastr.error("dipendente non inserito","ERRORE");
            }
        },
        error: (err) => {
            console.error('请求错误,状态码:', err.status);
            // this.res = err.status;
            this.toastr.error("dipendente non inserito","ERRORE");
        }
    })
}

2. 优化后端返回逻辑

你已经通过ResponseEntity设置了标准HTTP状态码,不需要再在响应体里重复返回状态值,可以直接返回业务对象或错误信息:

@CrossOrigin(origins = "http://localhost:4200")
@PostMapping("postcompetenza")
public ResponseEntity<?> addCompetenza(@RequestBody competenza comp) {
    try {
        competenza response = cs.addCompetenza(comp);
        // 成功返回200,响应体带保存后的业务对象
        return ResponseEntity.ok(response);
    } catch (IllegalArgumentException e) {
        // 冲突返回409,响应体带错误提示
        return ResponseEntity.status(HttpStatus.CONFLICT).body(e.getMessage());
    } catch (BadRequest e) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());
    } catch (Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服务内部错误");
    }
}

3. 验证异常分支

可以在后端cs.addCompetenza(comp)执行前主动抛出IllegalArgumentException做测试,确认请求会进入前端的error回调并弹出错误toast。如果还是未触发,检查全局异常处理器是否修改了你的返回状态码。

内容的提问来源于stack exchange,提问作者pietro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 22:21:02