Feign Client 문서 및 코드 작성
This commit is contained in:
@@ -9,6 +9,7 @@ dependencies {
|
||||
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
|
||||
implementation 'org.springframework.cloud:spring-cloud-starter-config'
|
||||
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
|
||||
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
|
||||
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
|
||||
implementation 'io.jsonwebtoken:jjwt:0.9.1'
|
||||
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
package com.roy.springcloud.userservice;
|
||||
|
||||
import com.roy.springcloud.userservice.client.FeignErrorDecoder;
|
||||
import feign.Logger;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
|
||||
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
|
||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@EnableEurekaClient
|
||||
|
||||
@EnableFeignClients
|
||||
@EnableDiscoveryClient
|
||||
@SpringBootApplication
|
||||
public class UserServiceApplication {
|
||||
|
||||
@@ -27,4 +32,14 @@ public class UserServiceApplication {
|
||||
return new RestTemplate();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Logger.Level feignLoggerLevel() {
|
||||
return Logger.Level.FULL;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public FeignErrorDecoder getFeignErrorDecoder() {
|
||||
return new FeignErrorDecoder();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.roy.springcloud.userservice.client;
|
||||
|
||||
import feign.Response;
|
||||
import feign.codec.ErrorDecoder;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.server.ResponseStatusException;
|
||||
|
||||
public class FeignErrorDecoder implements ErrorDecoder {
|
||||
@Override
|
||||
public Exception decode(String methodKey, Response response) {
|
||||
switch (response.status()) {
|
||||
case 404:
|
||||
if (methodKey.contains("getOrders")) {
|
||||
return new ResponseStatusException(HttpStatus.valueOf(response.status()), "Order Info Not Found");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return new Exception(response.reason());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.roy.springcloud.userservice.client;
|
||||
|
||||
import com.roy.springcloud.userservice.vo.response.OrderResponse;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@FeignClient(name = "order-service")
|
||||
public interface OrderServiceClient {
|
||||
|
||||
@GetMapping("/invalid-path/{userId}")
|
||||
// @GetMapping("/order-service/{userId}/orders")
|
||||
List<OrderResponse> getOrders(@PathVariable String userId);
|
||||
|
||||
}
|
||||
@@ -1,11 +1,13 @@
|
||||
package com.roy.springcloud.userservice.service.impl;
|
||||
|
||||
import com.roy.springcloud.userservice.client.OrderServiceClient;
|
||||
import com.roy.springcloud.userservice.domain.MyUser;
|
||||
import com.roy.springcloud.userservice.dto.MyUserDto;
|
||||
import com.roy.springcloud.userservice.repository.MyUserRepository;
|
||||
import com.roy.springcloud.userservice.service.MyUserService;
|
||||
import com.roy.springcloud.userservice.vo.response.OrderResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.http.HttpMethod;
|
||||
@@ -21,6 +23,7 @@ import java.util.*;
|
||||
|
||||
import static com.roy.springcloud.util.mapper.MapperUtil.toObject;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MyUserServiceImpl implements MyUserService {
|
||||
@@ -28,6 +31,7 @@ public class MyUserServiceImpl implements MyUserService {
|
||||
private final RestTemplate restTemplate;
|
||||
private final MyUserRepository userRepository;
|
||||
private final BCryptPasswordEncoder passwordEncoder;
|
||||
private final OrderServiceClient orderServiceClient;
|
||||
|
||||
@Override
|
||||
public void createUser(MyUserDto userDto) {
|
||||
@@ -41,12 +45,15 @@ public class MyUserServiceImpl implements MyUserService {
|
||||
public MyUserDto getUserByUserId(String userId) {
|
||||
MyUser savedUser = userRepository.findByUserId(userId)
|
||||
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
|
||||
ResponseEntity<List<OrderResponse>> orderListResponse = restTemplate.exchange(
|
||||
getOrderRequestUrl(userId), HttpMethod.GET, null,
|
||||
new ParameterizedTypeReference<List<OrderResponse>>() {}
|
||||
);
|
||||
// ResponseEntity<List<OrderResponse>> orderListResponse = restTemplate.exchange(
|
||||
// getOrderRequestUrl(userId), HttpMethod.GET, null,
|
||||
// new ParameterizedTypeReference<List<OrderResponse>>() {}
|
||||
// );
|
||||
// MyUserDto response = toObject(savedUser, MyUserDto.class);
|
||||
// response.setOrders(orderListResponse.getBody());
|
||||
List<OrderResponse> orderListResponse = orderServiceClient.getOrders(userId);
|
||||
MyUserDto response = toObject(savedUser, MyUserDto.class);
|
||||
response.setOrders(orderListResponse.getBody());
|
||||
response.setOrders(orderListResponse);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ greeting:
|
||||
message: Welcome to the Simple E-Commerce(User Service).
|
||||
|
||||
logging:
|
||||
lelvel:
|
||||
level:
|
||||
com.roy.springcloud.userservice: DEBUG
|
||||
|
||||
management:
|
||||
|
||||
Reference in New Issue
Block a user