항해 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: "유저 상세조회를 할 수 없습니다."
-
}