#java #spring #testing #content-type #pact
#java #spring #тестирование #тип содержимого #соглашение
Вопрос:
Я работаю над некоторыми тестами Pact Contract, используя RestPactRunner на стороне поставщика, и у меня следующая проблема. Конечная точка возвращает заголовок типа содержимого «application / json», когда присутствует тело, например
ResponseEntity<>(anyValidBody, HttpStatus.OK)
Но когда тело отсутствует, например, этот ответ
ResponseEntity<>(HttpStatus.FORBIDDEN)
заголовок «Тип содержимого: текстовый / обычный» отправляется клиенту по умолчанию, даже если produces = APPLICATION_JSON_VALUE
присутствует в сигнатуре метода (и тест контракта завершается неудачей, поскольку ожидается заголовок application / json)
Я искал способ установить заголовок типа содержимого по умолчанию на уровне тестирования, но не нашел ничего полезного.
Есть идеи? заранее спасибо
Ответ №1:
Тип ответа для 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)