首页 > 解决方案 > 为测试设置默认 Content-Type

问题描述

我正在提供者方面使用 RestPactRunner 进行一些 Pact Contract 测试,但我遇到了以下问题。当 body 存在时,端点返回“application/json”内容类型标头,例如

ResponseEntity<>(anyValidBody, HttpStatus.OK)

但是当没有身体存在时,就像这个反应

ResponseEntity<>(HttpStatus.FORBIDDEN)

默认情况下,“Content-Type:text/plain”标头会发送到客户端,即使produces = APPLICATION_JSON_VALUE方法签名中存在(合同测试失败,因为它需要一个 application/json 标头)

我正在寻找一种在测试级别设置默认内容类型标头的方法,但没有发现任何有用的东西。

有任何想法吗?提前致谢

标签: javaspringtestingcontent-typepact

解决方案


HttpResponse 的响应类型通常在请求映射中指定,例如:-

@RequestMapping(value = "/url", method = RequestMethod.GET, 
produces = "application/json; charset=utf-8")

如果未指定 spring 在这种情况下将提供默认值,则 spring 将在存在任何数据时提供 application/json 并在没有数据时提供 text/plain 。有一个具有以下签名的方法,您可以在其中提供响应的标头,您可以使用此方法设置内容类型

public ResponseEntity(T body, MultiValueMap<String, String> headers, HttpStatus status)

推荐阅读