JAVA-23235 Split or move spring-cloud-openfeign module (conti-4) (moved-8) (#14450)

Co-authored-by: timis1 <noreplay@yahoo.com>
This commit is contained in:
timis1 2023-07-22 21:05:37 +03:00 committed by GitHub
parent d0348f344e
commit 817170a1bf
22 changed files with 104 additions and 50 deletions

View File

@ -7,3 +7,4 @@ This module contains articles about Feign
- [Intro to Feign](https://www.baeldung.com/intro-to-feign) - [Intro to Feign](https://www.baeldung.com/intro-to-feign)
- [Retrying Feign Calls](https://www.baeldung.com/feign-retry) - [Retrying Feign Calls](https://www.baeldung.com/feign-retry)
- [Setting Request Headers Using Feign](https://www.baeldung.com/java-feign-request-headers) - [Setting Request Headers Using Feign](https://www.baeldung.com/java-feign-request-headers)
- [RequestLine with Feign Client](https://www.baeldung.com/feign-requestline)

View File

@ -1,2 +1,5 @@
## Relevant Articles ## Relevant Articles
- [Setup Http Patch Request With OpenFeign](https://www.baeldung.com/openfeign-http-patch-request) - [Setup Http Patch Request With OpenFeign](https://www.baeldung.com/openfeign-http-patch-request)
- [Introduction to Spring Cloud OpenFeign](https://www.baeldung.com/spring-cloud-openfeign)
- [Feign Logging Configuration](https://www.baeldung.com/java-feign-logging)
- [Configuring Spring Cloud FeignClient URL](https://www.baeldung.com/spring-cloud-feignclient-url)

View File

@ -1,10 +1,11 @@
package com.baeldung.cloud.openfeign.client; package com.baeldung.cloud.openfeign.client;
import com.baeldung.cloud.openfeign.model.Album;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import com.baeldung.cloud.openfeign.model.Album;
@FeignClient(name = "albumClient", url = "https://jsonplaceholder.typicode.com/albums/") @FeignClient(name = "albumClient", url = "https://jsonplaceholder.typicode.com/albums/")
public interface AlbumClient { public interface AlbumClient {
@GetMapping(value = "/{id}") @GetMapping(value = "/{id}")

View File

@ -1,14 +1,15 @@
package com.baeldung.cloud.openfeign.client; package com.baeldung.cloud.openfeign.client;
import com.baeldung.cloud.openfeign.config.ClientConfiguration; import java.util.List;
import com.baeldung.cloud.openfeign.hystrix.JSONPlaceHolderFallback;
import com.baeldung.cloud.openfeign.model.Post;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List; import com.baeldung.cloud.openfeign.config.ClientConfiguration;
import com.baeldung.cloud.openfeign.hystrix.JSONPlaceHolderFallback;
import com.baeldung.cloud.openfeign.model.Post;
@FeignClient(value = "jplaceholder", @FeignClient(value = "jplaceholder",
url = "https://jsonplaceholder.typicode.com/", url = "https://jsonplaceholder.typicode.com/",

View File

@ -1,10 +1,11 @@
package com.baeldung.cloud.openfeign.client; package com.baeldung.cloud.openfeign.client;
import com.baeldung.cloud.openfeign.model.Post;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import com.baeldung.cloud.openfeign.model.Post;
@FeignClient(name = "postClient", url = "${spring.cloud.openfeign.client.config.postClient.url}") @FeignClient(name = "postClient", url = "${spring.cloud.openfeign.client.config.postClient.url}")
public interface PostClient { public interface PostClient {
@GetMapping(value = "/{id}") @GetMapping(value = "/{id}")

View File

@ -1,10 +1,12 @@
package com.baeldung.cloud.openfeign.client; package com.baeldung.cloud.openfeign.client;
import com.baeldung.cloud.openfeign.model.Todo; import java.net.URI;
import feign.RequestLine;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import java.net.URI; import com.baeldung.cloud.openfeign.model.Todo;
import feign.RequestLine;
@FeignClient(name = "todoClient") @FeignClient(name = "todoClient")
public interface TodoClient { public interface TodoClient {

View File

@ -2,6 +2,7 @@ package com.baeldung.cloud.openfeign.config;
import com.baeldung.cloud.openfeign.exception.BadRequestException; import com.baeldung.cloud.openfeign.exception.BadRequestException;
import com.baeldung.cloud.openfeign.exception.NotFoundException; import com.baeldung.cloud.openfeign.exception.NotFoundException;
import feign.Response; import feign.Response;
import feign.codec.ErrorDecoder; import feign.codec.ErrorDecoder;

View File

@ -1,10 +1,10 @@
package com.baeldung.cloud.openfeign.config; package com.baeldung.cloud.openfeign.config;
import java.util.function.Supplier;
import feign.RequestInterceptor; import feign.RequestInterceptor;
import feign.RequestTemplate; import feign.RequestTemplate;
import java.util.function.Supplier;
public class DynamicUrlInterceptor implements RequestInterceptor { public class DynamicUrlInterceptor implements RequestInterceptor {
private final Supplier<String> urlSupplier; private final Supplier<String> urlSupplier;

View File

@ -1,16 +1,7 @@
package com.baeldung.cloud.openfeign.controller; package com.baeldung.cloud.openfeign.controller;
import com.baeldung.cloud.openfeign.config.DynamicUrlInterceptor; import java.net.URI;
import com.baeldung.cloud.openfeign.client.AlbumClient;
import com.baeldung.cloud.openfeign.client.PostClient;
import com.baeldung.cloud.openfeign.client.TodoClient;
import com.baeldung.cloud.openfeign.model.Album;
import com.baeldung.cloud.openfeign.model.Post;
import com.baeldung.cloud.openfeign.model.Todo;
import feign.Feign;
import feign.Target;
import feign.codec.Decoder;
import feign.codec.Encoder;
import org.springframework.beans.factory.ObjectFactory; import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
@ -24,7 +15,18 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.net.URI; import com.baeldung.cloud.openfeign.client.AlbumClient;
import com.baeldung.cloud.openfeign.client.PostClient;
import com.baeldung.cloud.openfeign.client.TodoClient;
import com.baeldung.cloud.openfeign.config.DynamicUrlInterceptor;
import com.baeldung.cloud.openfeign.model.Album;
import com.baeldung.cloud.openfeign.model.Post;
import com.baeldung.cloud.openfeign.model.Todo;
import feign.Feign;
import feign.Target;
import feign.codec.Decoder;
import feign.codec.Encoder;
@RestController @RestController
@Import(FeignClientsConfiguration.class) @Import(FeignClientsConfiguration.class)

View File

@ -0,0 +1,21 @@
package com.baeldung.cloud.openfeign.exception;
public class BadRequestException extends Exception {
public BadRequestException() {
}
public BadRequestException(String message) {
super(message);
}
public BadRequestException(Throwable cause) {
super(cause);
}
@Override
public String toString() {
return "BadRequestException: "+getMessage();
}
}

View File

@ -0,0 +1,18 @@
package com.baeldung.cloud.openfeign.exception;
public class NotFoundException extends Exception {
public NotFoundException(String message) {
super(message);
}
public NotFoundException(Throwable cause) {
super(cause);
}
@Override
public String toString() {
return "NotFoundException: " + getMessage();
}
}

View File

@ -1,12 +1,13 @@
package com.baeldung.cloud.openfeign.hystrix; package com.baeldung.cloud.openfeign.hystrix;
import com.baeldung.cloud.openfeign.client.JSONPlaceHolderClient;
import com.baeldung.cloud.openfeign.model.Post;
import org.springframework.stereotype.Component;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.springframework.stereotype.Component;
import com.baeldung.cloud.openfeign.client.JSONPlaceHolderClient;
import com.baeldung.cloud.openfeign.model.Post;
@Component @Component
public class JSONPlaceHolderFallback implements JSONPlaceHolderClient { public class JSONPlaceHolderFallback implements JSONPlaceHolderClient {

View File

@ -1,9 +1,9 @@
package com.baeldung.cloud.openfeign.service; package com.baeldung.cloud.openfeign.service;
import com.baeldung.cloud.openfeign.model.Post;
import java.util.List; import java.util.List;
import com.baeldung.cloud.openfeign.model.Post;
public interface JSONPlaceHolderService { public interface JSONPlaceHolderService {
List<Post> getPosts(); List<Post> getPosts();

View File

@ -1,12 +1,13 @@
package com.baeldung.cloud.openfeign.service.impl; package com.baeldung.cloud.openfeign.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baeldung.cloud.openfeign.client.JSONPlaceHolderClient; import com.baeldung.cloud.openfeign.client.JSONPlaceHolderClient;
import com.baeldung.cloud.openfeign.model.Post; import com.baeldung.cloud.openfeign.model.Post;
import com.baeldung.cloud.openfeign.service.JSONPlaceHolderService; import com.baeldung.cloud.openfeign.service.JSONPlaceHolderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service @Service
public class JSONPlaceHolderServiceImpl implements JSONPlaceHolderService { public class JSONPlaceHolderServiceImpl implements JSONPlaceHolderService {

View File

@ -1,3 +1,10 @@
spring.application.name=openfeign spring.application.name=openfeign
user.api.url=http://localhost:8082/api/user user.api.url=http://localhost:8082/api/user
feign.okhttp.enabled=true feign.okhttp.enabled=true
server.port=8085
spring.main.allow-bean-definition-overriding=true
logging.level.com.baeldung.cloud.openfeign.client=DEBUG
feign.hystrix.enabled=true
spring.cloud.openfeign.client.config.postClient.url=https://jsonplaceholder.typicode.com/posts/

View File

@ -1,17 +1,18 @@
package com.baeldung.cloud.openfeign; package com.baeldung.cloud.openfeign;
import com.baeldung.cloud.openfeign.model.Post; import static org.junit.Assert.assertFalse;
import com.baeldung.cloud.openfeign.service.JSONPlaceHolderService; import static org.junit.Assert.assertNotNull;
import java.util.List;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import java.util.List; import com.baeldung.cloud.openfeign.model.Post;
import com.baeldung.cloud.openfeign.service.JSONPlaceHolderService;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest @SpringBootTest

View File

@ -1,14 +1,9 @@
### Relevant Articles: ### Relevant Articles:
- [Introduction to Spring Cloud OpenFeign](https://www.baeldung.com/spring-cloud-openfeign) - [Differences Between Netflix Feign and Open.Feign](https://www.baeldung.com/netflix-feign-vs-openfeign)
- [Differences Between Netflix Feign and OpenFeign](https://www.baeldung.com/netflix-feign-vs-openfeign)
- [Provide an OAuth2 Token to a Feign Client](https://www.baeldung.com/spring-cloud-feign-oauth-token) - [Provide an OAuth2 Token to a Feign Client](https://www.baeldung.com/spring-cloud-feign-oauth-token)
- [Propagating Exceptions With OpenFeign and Spring](https://www.baeldung.com/spring-openfeign-propagate-exception)
- [Feign Client Exception Handling](https://www.baeldung.com/java-feign-client-exception-handling) - [Feign Client Exception Handling](https://www.baeldung.com/java-feign-client-exception-handling)
- [File Upload With Open Feign](https://www.baeldung.com/java-feign-file-upload) - [File Upload With Open Feign](https://www.baeldung.com/java-feign-file-upload)
- [Feign Logging Configuration](https://www.baeldung.com/java-feign-logging)
- [Retrieve Original Message From Feign ErrorDecoder](https://www.baeldung.com/feign-retrieve-original-message) - [Retrieve Original Message From Feign ErrorDecoder](https://www.baeldung.com/feign-retrieve-original-message)
- [RequestLine with Feign Client](https://www.baeldung.com/feign-requestline)
- [Propagating Exceptions With OpenFeign and Spring](https://www.baeldung.com/spring-openfeign-propagate-exception) - [Propagating Exceptions With OpenFeign and Spring](https://www.baeldung.com/spring-openfeign-propagate-exception)
- [Post form-url-encoded Data with Spring Cloud Feign](https://www.baeldung.com/spring-cloud-post-form-url-encoded-data) - [Post form-url-encoded Data with Spring Cloud Feign](https://www.baeldung.com/spring-cloud-post-form-url-encoded-data)
- [Configuring Spring Cloud FeignClient URL](https://www.baeldung.com/spring-cloud-feignclient-url)

View File

@ -8,5 +8,3 @@ spring.security.oauth2.client.registration.keycloak.authorization-grant-type=cli
spring.security.oauth2.client.registration.keycloak.client-id=payment-app spring.security.oauth2.client.registration.keycloak.client-id=payment-app
spring.security.oauth2.client.registration.keycloak.client-secret=863e9de4-33d4-4471-b35e-f8d2434385bb spring.security.oauth2.client.registration.keycloak.client-secret=863e9de4-33d4-4471-b35e-f8d2434385bb
spring.security.oauth2.client.provider.keycloak.token-uri=http://localhost:8083/auth/realms/master/protocol/openid-connect/token spring.security.oauth2.client.provider.keycloak.token-uri=http://localhost:8083/auth/realms/master/protocol/openid-connect/token
spring.cloud.openfeign.client.config.postClient.url=https://jsonplaceholder.typicode.com/posts/