컨트롤러를 테스트 하는 중 위 에러가 발생했다. 해석하면 "고유한 결과를 반환시키지 못함" 인데..
원인은
@GetMapping
public ResponseEntity<UserEntity.Response> emailInquiry(@RequestBody UserEntity.Request request){
System.out.println(request);
UserEntity getEmail = userRepository.findByEmail(request.getEmail());
UserEntity.Response res = UserEntity.Response.toResponse(getEmail);
return ResponseEntity.ok().body(res);
}
여기에 있다. 이메일로 회원을 찾는 컨트롤러 메소드이다. 에러를 자세히 보면
고유한 결과가 2개라고 나온다. 이 뜻은 정확히 말하면 DB에 등록된 서로 다른 유저의 정보 중 이메일이 중복된 값으로 2개가 저장되어 있는데, emailInquiry 메소드는 이 두 개 중 어느 것을 반환시킬지 알지 못한다. 따라서 위와 같은 에러가 발생한 것이다. 따라서 같은 이메일을 가진 여러 유저를 한 번에 조회하고 싶다면 아래 코드처럼 List를 써야할 것이다.
public List<UserEntity.Response> emailsInquiry(@RequestBody UserEntity.Request request){
System.out.println(request);
List<UserEntity> getEmail = userService.findAllEmail(request.getEmail());
List<UserEntity.Response> res = UserEntity.Response.toResponseList(getEmail);
return res;
그런데 서로 다른 회원이 같은 이메일 주소를 가질 수는 없다.
따라서 DB쪽에서 필드 값을 UNIQUE로 만들어 중복을 없앤다던가, 따로 예외처리를 시켜야 할 것이다. 위 코드는 단순 연습용이고 다른 쪽으로 응용할 수 있을 것 같아 기록을 남긴다.
'에러사항 모음' 카테고리의 다른 글
Parameter value ["Value"] did not match expected type (0) | 2022.11.29 |
---|---|
Table 'DB명.hibernate_sequence' doesn't exist (0) | 2022.11.24 |
Field '컬럼명' doesn't have a default value (0) | 2022.11.24 |
Unable to locate Attribute with the the given name [컬럼명] on this ManagedType (0) | 2022.11.24 |