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<>());
}
}
RestTemplate
를 사용하여 order-service로 회원의 주문 정보를 요청