заголовок контракта принять с ресурсом API и симулировать клиента - PullRequest
0 голосов
/ 27 сентября 2019

симулированный клиент работает с контрактами, но не с фактическим ресурсом API

У меня симулированный клиент с интеграционными тестами по контракту.все работает нормально, но при переходе к сквозным тестам симулированный клиент продолжает получать код состояния 406.Как это могло случиться?

Ресурс API (очень стандартный API в контроллере):

@RestController
@RequestMapping(value = "/")
public class DateController {
 @GetMapping(path = "/somepath", produces = "text/plain")
 public ResponseEntity<String> getDateAsString(){   
  return ResponseEntity.status(HttpStatus.OK).body("20190909");
}

Контракт:

 request {
        method GET()

        urlPath ($(consumer('/somepath'),
                producer('/somepath'))) {
        }
# is below normal based on the controller API definition?
        headers {accept(textPlain())}
    }

    response {
        status 200
        headers {contentType(textPlain())}
        body("20190909")
    }

симулировать клиента (должен "производить = ..." в симуляцииклиент?):


public interface DateClient {
@GetMapping(path = "/somepath", produces = "text/plain")
String getDateAsString();
}

вот тест интеграции симулированного клиента

public class DateClientTest {
    @Autowired
    private DateClient dateClient;

    @Test
    public void getDate() throws Exception {
        String date = dateClient.getDateAsString();
        assertThat(date).isEqualTo("20190909");
    }

Поскольку симметричный клиент отлично работает с контрактом, я ожидаю того же поведения с реальным ресурсом API.к сожалению, в реальной среде я получил 406 код состояния от зависимого микросервиса.

Может кто-нибудь помочь, если что-то не так с контрактом или симулировать клиента?

В качестве эксперимента я удалил "Производит = ... "в симулированном клиенте, как показано ниже (это должно быть правильно симулировать клиента?).Теперь фактическая среда работает нормально, но это не работает с контрактом.

@GetMapping(path = "/somepath")
String getDateAsString();

здесь информация о версии:

springboot version: 1.5.3.RELEASE
spring cloud version: Dalston.RELEASE
spring-cloud-contract version: 1.2.1.RELEASE

это простой запрос Get, если использовать команду curl для моего микросервиса:

curl -v "http://localhost:8090/somepath"

и ниже - регистрация ошибок от симулированного клиента:

message="Feign client received an unsuccessful response.", status="406", reason="Not Acceptable"
path="/somepath"

нет потребителя (я пропустил один параметр запроса "? Id = {id}"

...