From af92638311e089c6780aa2827124817b5572de9d Mon Sep 17 00:00:00 2001 From: MJY Date: Wed, 4 Feb 2026 14:20:04 +0900 Subject: [PATCH] fix: avoid inferring Content-Type without body Do not add application/x-www-form-urlencoded when a POST/PUT/PATCH request has no content. Add a test to verify no Content-Type header is inferred for empty POST requests. Fixes #1017 Signed-off-by: MJY --- .../springframework/restdocs/http/HttpRequestSnippet.java | 2 +- .../restdocs/http/HttpRequestSnippetTests.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpRequestSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpRequestSnippet.java index 4639a1a9..bddc6950 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpRequestSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpRequestSnippet.java @@ -178,7 +178,7 @@ private void writeMultipartEnd(PrintWriter writer) { private boolean requiresFormEncodingContentTypeHeader(OperationRequest request) { return request.getHeaders().get(HttpHeaders.CONTENT_TYPE) == null && isPutPostOrPatch(request) - && !includeParametersInUri(request); + && request.getContent().length > 0 && !includeParametersInUri(request); } private Map header(String name, String value) { diff --git a/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpRequestSnippetTests.java b/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpRequestSnippetTests.java index 203084d3..45a2f4bd 100644 --- a/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpRequestSnippetTests.java +++ b/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpRequestSnippetTests.java @@ -101,6 +101,14 @@ void postRequestWithContent(OperationBuilder operationBuilder, AssertableSnippet .header(HttpHeaders.CONTENT_LENGTH, content.getBytes().length)); } + @RenderedSnippetTest + void postRequestWithoutContentDoesNotInferContentType(OperationBuilder operationBuilder, + AssertableSnippets snippets) throws IOException { + new HttpRequestSnippet().document(operationBuilder.request("http://localhost/foo").method("POST").build()); + assertThat(snippets.httpRequest()) + .isHttpRequest((request) -> request.post("/foo").header(HttpHeaders.HOST, "localhost")); + } + @RenderedSnippetTest void postRequestWithContentAndQueryParameters(OperationBuilder operationBuilder, AssertableSnippets snippets) throws IOException {