From c2ae469fc834c336555b125b424c9ff44462fba9 Mon Sep 17 00:00:00 2001 From: Pasichenko Maksym Date: Fri, 29 Mar 2024 22:50:16 +0200 Subject: [PATCH 1/4] Add support for custom HTTP status codes --- .../cloud/openfeign/support/ResponseEntityDecoder.java | 4 ++-- .../cloud/openfeign/support/SpringDecoder.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/ResponseEntityDecoder.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/ResponseEntityDecoder.java index c1fdee9d0..ee3fc3db8 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/ResponseEntityDecoder.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/ResponseEntityDecoder.java @@ -27,7 +27,7 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; /** @@ -84,7 +84,7 @@ private ResponseEntity createResponse(Object instance, Response response) headers.put(key, new LinkedList<>(response.headers().get(key))); } - return new ResponseEntity<>((T) instance, headers, HttpStatus.valueOf(response.status())); + return new ResponseEntity<>((T) instance, headers, HttpStatusCode.valueOf(response.status())); } } diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringDecoder.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringDecoder.java index 269e1c741..45f74bc83 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringDecoder.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringDecoder.java @@ -32,7 +32,7 @@ import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.client.HttpMessageConverterExtractor; @@ -82,8 +82,8 @@ private FeignResponseAdapter(Response response) { } @Override - public HttpStatus getStatusCode() { - return HttpStatus.valueOf(response.status()); + public HttpStatusCode getStatusCode() { + return HttpStatusCode.valueOf(response.status()); } @Override From 6ae0d4f3063e1d8b8d5dc8e1b68c73ee8d75ce7d Mon Sep 17 00:00:00 2001 From: Pasichenko Maksym Date: Wed, 3 Apr 2024 22:52:35 +0300 Subject: [PATCH 2/4] Add author name and update copyright --- .../cloud/openfeign/support/ResponseEntityDecoder.java | 3 ++- .../springframework/cloud/openfeign/support/SpringDecoder.java | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/ResponseEntityDecoder.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/ResponseEntityDecoder.java index ee3fc3db8..75001959d 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/ResponseEntityDecoder.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/ResponseEntityDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2022 the original author or authors. + * Copyright 2013-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ * * @author chad jaros * @author Olga Maciaszek-Sharma + * @author Maksym Pasichenko */ public class ResponseEntityDecoder implements Decoder { diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringDecoder.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringDecoder.java index 45f74bc83..b1219ec01 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringDecoder.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringDecoder.java @@ -42,6 +42,7 @@ /** * @author Spencer Gibb * @author Olga Maciaszek-Sharma + * @author Maksym Pasichenko */ public class SpringDecoder implements Decoder { From 1bb927b691c7e8c3cb000a5232c5f58cf1294e94 Mon Sep 17 00:00:00 2001 From: Pasichenko Maksym Date: Wed, 3 Apr 2024 23:25:21 +0300 Subject: [PATCH 3/4] Add test --- .../SpringDecoderIntegrationTests.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/SpringDecoderIntegrationTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/SpringDecoderIntegrationTests.java index c70da1b9e..f219f9be5 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/SpringDecoderIntegrationTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/SpringDecoderIntegrationTests.java @@ -35,6 +35,7 @@ import org.springframework.context.annotation.Import; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.test.annotation.DirtiesContext; @@ -49,6 +50,7 @@ * @author Spencer Gibb * @author Olga Maciaszek-Sharma * @author Szymon Linowski + * @author Maksym Pasichenko */ @SpringBootTest(classes = SpringDecoderIntegrationTests.Application.class, webEnvironment = WebEnvironment.RANDOM_PORT, value = { "spring.application.name=springdecodertest", "spring.jmx.enabled=false" }) @@ -152,10 +154,20 @@ void testResponseEntityHeaders() { assertThat(response.getHeaders().getContentType()).isEqualTo(MediaType.APPLICATION_JSON); } + @Test + // Issue: https://github.com/spring-cloud/spring-cloud-openfeign/issues/1010 + void testResponseEntityWithCustomHttpStatusCode(){ + ResponseEntity response = testClient().getCustomHttpStatusCodeResponse(); + assertThat(response.getStatusCode()).isEqualTo(HttpStatusCode.valueOf(245)); + } + protected interface TestClient { @GetMapping("/helloresponse") ResponseEntity getHelloResponse(); + + @GetMapping("/hellocustomhttpstatuscode") + ResponseEntity getCustomHttpStatusCodeResponse(); @GetMapping("/hellovoid") ResponseEntity getHelloVoid(); @@ -229,6 +241,11 @@ public ResponseEntity getHelloResponse() { return ResponseEntity.ok(new Hello("hello world via response")); } + @Override + public ResponseEntity getCustomHttpStatusCodeResponse() { + return ResponseEntity.status(245).body(new Hello("hello world via response with custom HTTP status code")); + } + @Override public ResponseEntity getHelloVoid() { return ResponseEntity.noContent().header("X-test-header", "myval").build(); From a9cd8e4211e250778797d188e41e3d6ee5b14930 Mon Sep 17 00:00:00 2001 From: Pasichenko Maksym Date: Wed, 10 Apr 2024 21:02:09 +0300 Subject: [PATCH 4/4] Fix codestyle --- .../cloud/openfeign/SpringDecoderIntegrationTests.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/SpringDecoderIntegrationTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/SpringDecoderIntegrationTests.java index f219f9be5..f2cf2924f 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/SpringDecoderIntegrationTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/SpringDecoderIntegrationTests.java @@ -156,7 +156,7 @@ void testResponseEntityHeaders() { @Test // Issue: https://github.com/spring-cloud/spring-cloud-openfeign/issues/1010 - void testResponseEntityWithCustomHttpStatusCode(){ + void testResponseEntityWithCustomHttpStatusCode() { ResponseEntity response = testClient().getCustomHttpStatusCodeResponse(); assertThat(response.getStatusCode()).isEqualTo(HttpStatusCode.valueOf(245)); } @@ -165,7 +165,7 @@ protected interface TestClient { @GetMapping("/helloresponse") ResponseEntity getHelloResponse(); - + @GetMapping("/hellocustomhttpstatuscode") ResponseEntity getCustomHttpStatusCodeResponse();