항해 99(9기)/항해 일일

항해 99 18일차

jossiya 2022. 10. 6. 15:17

[Spring] 회원 조회 API 만들기 (문제)

 
Goal : 회원목록 조회 API를 만들어봅시다.
지금까지 배운 내용을 바탕으로 간단한 회원 목록 조회 API를 만들어봅시다.
 
features : 구현해야 할 기능이에요.
회원 목록 DB는 다음과 같이 설계되어있어요.
테이블명 : Member
id : 회원 번호 (DB 인덱스)
name (String) : 회원 이름
email (String) : 회원 아이디
pw (String) : 회원 비밀번호
MemberInfoResponse.js
@Getter
@NoArgsConstructor
public class MemberInfoResponseDto {

    private Long id;
    private String name;
    private String email;
    private String pw;

    public MemberInfoResponseDto(Member member) {
        this.id=member.getId();
        this.name = member.getName();
        this.email= member.getEmail();
        this.pw=member.getEmail();
    }
}
 
 

commonResponse.js

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CommonResponse {
    private List<Object> result;

    public static CommonResponse response(List<Object> result){
        CommonResponse commonResponse = CommonResponse.builder().result(result).build();
        return commonResponse;
    }

}

MemberController.js

@RequiredArgsConstructor
@RestController
public class MemberController {

    private final MemberService memberService;
    /**
     * 한 회원의 userId가 주었을때 회원 정보를 조회하는 API
     * @param id
     */
    @GetMapping("/member/{id}")
    public CommonResponse getMemberInfo(@PathVariable Long id) {

        return memberService.findMember(id);
    }

    /**
     * 회원의 전체 목록을 조회하는 API
     */
    @GetMapping("/member")
    public CommonResponse getMemberList(){
        return memberService.findAllMember();
    }

}

MemberService.js

@Service
@RequiredArgsConstructor
public class MemberService {

    private final MemberRepository memberRepository;


    public CommonResponse findMember(Long memberId) {
        try {
            return CommonResponse.response(Collections.singletonList((memberRepository.findById(memberId).get())));
        }catch (NoSuchElementException e){
            
           return CommonResponse.response(Collections.singletonList("회원 목록 상세 조회 실패"));
        }
    }


    public CommonResponse findAllMember() {
        try {
            return CommonResponse.response(Collections.singletonList(memberRepository.findAll()));
        }catch (Exception e){
            return CommonResponse.response(Collections.singletonList("회원 목록 조회 실패"));
        }
    }
}

에러 시

{

  •  
  • result: [
    • "회원 목록 상세 조회 실패"
    ]

}

전반적으로 결과를 조회하고 성공 실패여부에 따라 status response를 양식을 만들어 넘겨주라는 문제였다.

위에 코드는 본인이 시험시간에 짠 코드이다.

 

밑에 코드는  시험 끝나고 끄적인것

내가 원하는 response 형식을 만들어 봤다.

CommonResponse.js

@Data
//@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CommonResponse<T> {
    private boolean success;

    private T result;

    private Error error;


//    public static CommonResponse response(Object data){
//        CommonResponse commonResponse = CommonResponse.builder().data(data).build();
//        return commonResponse;
//    }
    public static <T> CommonResponse<T> success(T data){
        return new CommonResponse<>(true,data,null);
    }
    public static <T> CommonResponse<T> successHeader(T data, HttpHeaders headers){
        return new CommonResponse<>(true, data, null);
    }
    public static <T> CommonResponse<T> fail(String code, String message){
        return new CommonResponse<>(false, null, new Error(code, message));
    }
    @Getter
    @AllArgsConstructor
    static class Error {
        private String code;
        private String message;

    }
}

{

  • success: false,
  • result: null,
  • error: {
    • code: "NO_SEARCH_ELEMENT",
    • message: "유저 상세조회를 할 수 없습니다."
    }

}