diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Headers.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Headers.groovy index 3eaf936dbc..61278dbeba 100644 --- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Headers.groovy +++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Headers.groovy @@ -34,6 +34,7 @@ class Headers { @Delegate MediaTypes mediaTypes = new MediaTypes() @Delegate HttpHeaders httpHeaders = new HttpHeaders() + @Delegate MessagingHeaders messagingHeaders = new MessagingHeaders() Set
entries = [] @@ -60,6 +61,10 @@ class Headers { header(httpHeaders.contentType(), matching(contentType)) } + void messagingContentType(String contentType) { + header(messagingHeaders.messagingContentType(), matching(contentType)) + } + /** * If for the consumer / producer you want to match exactly only * the root of content type. I.e. {@code application/json;charset=UTF8} diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/MessagingHeaders.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/MessagingHeaders.groovy new file mode 100644 index 0000000000..488be97ae8 --- /dev/null +++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/MessagingHeaders.groovy @@ -0,0 +1,25 @@ +package org.springframework.cloud.contract.spec.internal + +import groovy.transform.CompileStatic +import groovy.transform.EqualsAndHashCode +import groovy.transform.ToString + +/** + * Contains most commonly used messaging headers + * + * @author Marcin Grzejszczak + * @since 1.1.2 + */ +@CompileStatic +@EqualsAndHashCode +@ToString(includePackage = false) +class MessagingHeaders { + + /** + * The Content Type of a message + * @return + */ + String messagingContentType() { + return "contentType" + } +} diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy index 01fae3f1b3..703b68c885 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy @@ -40,6 +40,7 @@ def contractDsl = Contract.make { body('''{ "bookName" : "foo" }''') headers { header('BOOK-NAME', 'foo') + messagingContentType(applicationJson()) } } } @@ -60,6 +61,7 @@ def contractDsl = Contract.make { ContractVerifierMessage response = contractVerifierMessaging.receive('activemq:output') assert response != null response.getHeader('BOOK-NAME')?.toString() == 'foo' + response.getHeader('contentType')?.toString() == 'application/json' and: DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.payload)) assertThatJson(parsedJson).field("bookName").isEqualTo("foo") @@ -81,6 +83,7 @@ def contractDsl = Contract.make { body('''{ "bookName" : "foo" }''') headers { header('BOOK-NAME', 'foo') + messagingContentType(applicationJson()) } } } @@ -101,6 +104,8 @@ def contractDsl = Contract.make { assertThat(response).isNotNull(); assertThat(response.getHeader("BOOK-NAME")).isNotNull(); assertThat(response.getHeader("BOOK-NAME").toString()).isEqualTo("foo"); + assertThat(response.getHeader("contentType")).isNotNull(); + assertThat(response.getHeader("contentType").toString()).isEqualTo("application/json"); // and: DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); assertThatJson(parsedJson).field("bookName").isEqualTo("foo");