Communtication Types


Rest Template

RestTemplate 사용


user-service : UserServiceApplication

@SpringBootApplication
@EnableDiscoveryClient // 유레카 클라이언트 역할
public class UserServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
		
		// 추가
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

user-service.yml 수정

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password: '{cipher}AQA9aFzjQgXs08dtsxm1rWSIAgp6Fr0Om5kctg3oHYsU0bJ/mq5q7BHJnobNeRmzpusQS4cdCx2Kjs9WjBHV7t3NCdZfXsUCKspj7g3cu5oYEMvkQFswMXTMme5ADOVL0gfDZjVFqowZ981fU7c3k7gFFE3bWjzjmsWOTxdHzAtHzKd3D9FW3NrGOzdVNzRuumX1Qz3riMvO+Odryv0UFwoQUSGxid3pwxfH+Ah6HP4cFnw4OWXiQaCMvtbpDTtXpXhs6bLxnAwUxW2xtcg6M8OAviF+OI1RjMM0h1U/1pnLKwup7ME4yeMDcdfieZZfeWNnp+HqlsgBCNdYJYNqgwkDKvVpbjKEm7L47kRL/bhXNUZ+fRFMPMJ4hUfeKrTioEM='

token:
  expiration_time: 864000000
  secret: '{cipher}AQAohu76tjoAgniqVVG6+LJrXdjSzN64eqmb0fnWMAfA7pjPUYKslG1gWMQ0+nnlEiQv2RFoPaMPWf4EI96iG5WGQVE8h2N79FPuwZvAIDdFj0Htclw7NBZ1MsmLh5ME6J51lBuVwO4l9aoiOMI3SoXplRDrfqv1hwAXJLjaYXQapSHoMDoLNSACaMpPBkZF6WgUFCrBUjtVC2k+07Ps4GudjnR48S3AHvq45JXJEh6efa9BOMXJunrR0FPdTPAxaWE7CTGHi6QDz7gO70oCZuejHAOpvuYsGdmb1X4KvZHVP6htdsWsWyfpWy0bqBEKeZj2R1/TwH1c6zQS5qVeBbB1dsqavo2QhDccTWsTcMfKyoQeevKc7L0UQ3OnNC7/D2zlOQF08KIAovxFaZHQiYmD'

gateway:
  ip: 192.168.0.4

# 추가
order_service:
  url: <http://127.0.0.1:8000/order-service/%s/orders>

user-service : UserServiceImpl

@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{

    private final UserRepository userRepository;
    private final BCryptPasswordEncoder passwordEncoder;
		// 추가
    private final RestTemplate restTemplate;
    private final Environment env;

    @Override
    public UserDto createUser(UserDto userDto) {
        userDto.setUserId(UUID.randomUUID().toString());
        ModelMapper mapper = new ModelMapper();

        // ModelMapper 의 매핑 전략 설정
        // STRICT - 일치해야한다.
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
        UserEntity userEntity = mapper.map(userDto, UserEntity.class);
        userEntity.setEncryptedPwd(passwordEncoder.encode(userDto.getPwd()));

        userRepository.save(userEntity);

        UserDto returnUserDto = mapper.map(userEntity, UserDto.class);
        return returnUserDto;
    }

    @Override
    public UserDto getUserByUserId(String userId) {
        UserEntity userEntity = userRepository.findByUserId(userId);

        if(userEntity == null){
            throw new UsernameNotFoundException("User not found");
        }
        UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);

//        List<ResponseOrder> orders = new ArrayList<>();
				// 추가
        /* Using as RestTemplate */
        String orderUrl = String.format(env.getProperty("order_service.url"), userId);
        ResponseEntity<List<ResponseOrder>> orderListResponse =
                restTemplate.exchange(orderUrl, HttpMethod.GET, null,
                new ParameterizedTypeReference<List<ResponseOrder>>() {

                });

        List<ResponseOrder> orderList = orderListResponse.getBody();
        userDto.setOrders(orderList);
        return userDto;
    }

    @Override
    public Iterable<UserEntity> getUserByAll() {
        return userRepository.findAll();
    }

    @Override
    public UserDto getUserDetailsByEmail(String email) {
        UserEntity userEntity = userRepository.findByEmail(email);

        if (userEntity == null){
            throw new UsernameNotFoundException(email);
        }

        UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);
        return userDto;
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        UserEntity userEntity = userRepository.findByEmail
                (username);

        if(userEntity == null){
            throw new UsernameNotFoundException(username);
        }

        return new User(userEntity.getEmail(),userEntity.getEncryptedPwd(),
                true,true,true,true,new ArrayList<>());
    }
}