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

RestAssuredWebTestClient使用ResponseSpecification时如何打印响应体日志

问题根因&修复步骤

  1. 首先修复代码中的低级错误:你调用了build()方法生成ResponseSpecification实例,但没有接住返回值,反而直接返回了ResponseSpecBuilder对象,导致配置未生效。
  2. ResponseSpecBuilder默认的log(LogDetail.BODY)配置仅在响应断言失败时才会打印日志,如果你需要无论断言成功还是失败都打印响应体,需要使用重载的log方法开启通过时也打印的配置。
  3. 确保你在测试代码中正确引用了这个公共规格,要么每次请求手动指定spec,要么配置全局生效。

修正后的代码

@Slf4j
@NoArgsConstructor
public class RestAssureSpecs {

  final private static Long MAX_TIMEOUT = 15000L;
  final private static ContentType JSON_CONTENT_TYPE = ContentType.JSON;

  public static ResponseSpecification responseSpecs() {
    return new ResponseSpecBuilder()
         .expectResponseTime(lessThanOrEqualTo(MAX_TIMEOUT))
         .expectContentType(JSON_CONTENT_TYPE)
         .expectHeader("Content-Type", String.valueOf(JSON_CONTENT_TYPE))
         // 三个参数分别是:打印级别、是否美化打印、断言通过是否也打印
         .log(LogDetail.BODY, true, true)
         .build();
  }
}

全局生效配置(可选,不需要每个测试手动加spec)

你可以在测试类的@BeforeAll方法里配置全局默认规格,所有请求自动生效:

@BeforeAll
static void initSpec() {
    RestAssuredWebTestClient.responseSpecification = RestAssureSpecs.responseSpecs();
}

特殊场景适配

如果开启后还是没有打印,检查你项目的日志配置是否屏蔽了RestAssured的控制台输出,RestAssured默认使用System.out打印日志,如果你配置了日志框架把stdout输出屏蔽了,可以手动指定日志输出目标:

// 放在responseSpecs()方法开头即可
RestAssured.config = RestAssured.config().logConfig(
    LogConfig.logConfig().defaultStream(System.out)
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:10