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

SpringBoot中如何去除异常返回消息中的多余反斜杠

原因说明

你看到的反斜杠不属于业务返回的有效内容,本质是两种情况导致的:

  • 第一种是JSON标准序列化的正常转义:JSON语法要求字符串值内部的双引号必须用\转义为\",否则会和包裹字符串的边界双引号冲突,导致JSON结构损坏。你在Postman的Raw原始响应视图看到的转义符是JSON文本的语法组成部分,不是实际返回的业务字符。
  • 第二种是全局异常处理逻辑存在重复序列化问题,导致反序列化后的业务字符串里仍然保留反斜杠,属于代码bug。

对应解决方案

情况1:仅原始JSON视图可见反斜杠,解析后无异常

这种不需要修改任何代码,属于正常表现:

  • 切换Postman响应栏的Pretty/Preview视图,就能看到无转义符的正常文本:city with name "Toronto" not found!
  • 前端、其他服务调用该接口时,对响应做标准JSON解析后,拿到的errors字段内容不会带反斜杠,完全不影响业务使用。

你代码里拼接双引号的写法可以优化为更易读的形式,不需要手动拼接'"'字符:

// 优化后的异常抛出代码
throw new DataNotFoundException(String.format("city with name \"%s\" not found!", name));

情况2:JSON解析后拿到的字符串仍带反斜杠

这是异常处理逻辑存在重复序列化导致的,常见于全局异常处理器中手动把字符串做了JSON序列化后再塞入响应字段,比如错误写法示例:

@ExceptionHandler(DataNotFoundException.class)
public ResponseEntity<ErrorResp> handleDataNotFound(DataNotFoundException e) {
    ErrorResp resp = new ErrorResp();
    resp.setStatus("NOT_FOUND");
    resp.setMessage("Entity not found");
    // 错误:手动调用writeValueAsString把普通字符串转成了JSON格式字符串,再交给框架序列化会二次转义
    resp.setErrors(List.of(objectMapper.writeValueAsString(e.getMessage())));
    return ResponseEntity.status(404).body(resp);
}

修复步骤:

  • 移除异常处理逻辑中手动对错误消息做JSON序列化的代码,直接把原始Java字符串传入errors字段,交给Spring默认集成的Jackson序列化器统一处理即可
  • 检查自定义错误响应类、异常拦截逻辑,确认没有对消息字段做额外的转义、字符串包装操作
  • 如果同时配置了Spring默认错误处理规则和自定义全局异常处理器,排查是否存在两者冲突导致的重复序列化问题,保留一套异常处理逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:15:32