ユーザークエリー
🔨APIゲートウェイの追加
gatewayでリクエストが正常に動作していることを確認できます.
🔨ユーザー・クエリー・サービスの作成
ResponseOrderの作成
ResponseUserの変更
Userdtoの変更
コントローラの変更
サービスの変更
結果
まず2つのアカウントを登録します.
すべての検索機能
1人のプレイヤーを検索する機能が正常に動作していることを確認できます.
server:
port: 8000
eureka: #eureka 세팅은 현재 사용 안함
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
spring:
application: #gateway service 이름
name: apigateway-service
cloud:
gateway: #gateway 설정
default-filters:
- name : GlobalFilter #Global Filter로 지정된 java 파일 이름
args:
baseMessage: Spring Cloud Gateway Global Filter
preLogger: true
postLogger: true
routes:
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/users/**
filters:
- CustomFilter
以前使用していたapi gatewayでは、ymlを変更するだけで使用できます@RestController
@RequestMapping("/user-service")
@RequiredArgsConstructor
public class UserController {
...
}
コントローラも変更されますgatewayでリクエストが正常に動作していることを確認できます.
🔨ユーザー・クエリー・サービスの作成
ResponseOrderの作成
@Data
public class ResponseOrder {
private String productId;
private Integer qty;
private Integer unitPrice;
private Integer totalPrice;
private LocalDateTime createdAt;
private String orderId;
}
まずuserに受注を追加するために作成しますResponseUserの変更
@Data
@JsonInclude(JsonInclude.Include.NON_NULL) //반환 데이터 중 null 들어가는 것을 방지
public class ResponseUser {
private String email;
private String name;
private String userId;
private List<ResponseOrder> orders;
}
userデータへの受注の追加Userdtoの変更
@Data
public class UserDto {
private String email;
private String name;
private String pwd;
private String userId;
private LocalDateTime createAt;
private String encryptedPwd;
private List<ResponseOrder> orders;
}
dtoに追加コントローラの変更
@RestController
@RequestMapping("/user-service")
@RequiredArgsConstructor
public class UserController {
...
@GetMapping("/users")
public ResponseEntity<List<ResponseUser>> getUsers(){
Iterable<UserEntity> userList = userService.getUserByAll();
List<ResponseUser> result = new ArrayList<>();
userList.forEach(v -> {
result.add(new ModelMapper().map(v,ResponseUser.class));
});
return ResponseEntity.ok().body(result);
}
@GetMapping("/users/{userId}")
public ResponseEntity<ResponseUser> getUser(@PathVariable("userId") String userId){
UserDto userDto = userService.getUserByUserId(userId);
ResponseUser responseUser = new ModelMapper().map(userDto, ResponseUser.class);
return ResponseEntity.ok().body(responseUser);
}
}
コントローラにurlを2つ追加サービスの変更
public interface UserService {
ResponseUser createUser(UserDto userDto);
UserDto getUserByUserId(String userId);
Iterable<UserEntity> getUserByAll();
}
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{
...
@Override
public UserDto getUserByUserId(String userId) {
UserEntity userEntity = userRepository.findByUserId(userId);
if(userEntity == null) throw new UsernameNotFoundException("user name not found!");
UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);
List<ResponseOrder> orderList = new ArrayList<>();
userDto.setOrders(orderList);
return userDto;
}
@Override
public Iterable<UserEntity> getUserByAll() {
return userRepository.findAll();
}
}
ユーザーレポートの変更public interface UserRepository extends CrudRepository<UserEntity, Long> {
UserEntity findByUserId(String userId);
}
サービスからロードされたfindの追加結果
まず2つのアカウントを登録します.
すべての検索機能
1人のプレイヤーを検索する機能が正常に動作していることを確認できます.
Reference
この問題について(ユーザークエリー), 我々は、より多くの情報をここで見つけました https://velog.io/@ililil9482/User-조회テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol