diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMethodBodyBuilder.groovy index 01a3b88473..3a5d92d9d5 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMethodBodyBuilder.groovy @@ -189,7 +189,8 @@ abstract class JUnitMethodBodyBuilder extends RequestProcessingMethodBodyBuilder readBytesFromFileString(fileProperty, CommunicationType.REQUEST) : readStringFromFileString(fileProperty, CommunicationType.REQUEST) } else { - value = "\"$body\"" + String escaped = escapeRequestSpecialChars(body.toString()) + value = "\"$escaped\"" } return ".body($value)" } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy index 5d2783f313..7f17587774 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy @@ -125,6 +125,10 @@ abstract class MethodBodyBuilder implements ClassVerifier { return new HandlebarsTemplateProcessor() } + protected ContentType getRequestContentType() { + return ContentType.UNKNOWN + } + /** * Builds the response body validation code block */ diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy index 9d76d4699e..dd5772937d 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy @@ -65,6 +65,14 @@ abstract class RequestProcessingMethodBodyBuilder extends MethodBodyBuilder { this.response = stubDefinition.response } + protected String escapeRequestSpecialChars(String string) { + if (getRequestContentType() == ContentType.JSON) { + return string + .replaceAll('\\\\n', '\\\\\\\\n') + } + return string + } + /** * Returns code used to retrieve a response for the given {@link Request} */ diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMethodRequestProcessingBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMethodRequestProcessingBodyBuilder.groovy index 380d64d632..21ac232eec 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMethodRequestProcessingBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMethodRequestProcessingBodyBuilder.groovy @@ -164,7 +164,8 @@ abstract class SpockMethodRequestProcessingBodyBuilder extends RequestProcessing readBytesFromFileString(fileProperty, CommunicationType.REQUEST) : readStringFromFileString(fileProperty, CommunicationType.REQUEST) } else { - value = "'''$body'''" + String escaped = escapeRequestSpecialChars(body.toString()) + value = "'''$escaped'''" } return ".body($value)" }