스프링데이터 + JPA/API 개발

3. 회원 조회 API

sdafdq 2023. 11. 12. 18:30
@GetMapping("/api/v1/members")
public List<Member> membersV1(){
    return memberService.findMembers();
}

@GetMapping("/api/v2/members")
public Result memberV2(){
    List<Member> findMembers =  memberService.findMembers();
    List<MemberDto> collect = findMembers.stream()
            .map(m-> new MemberDto(m.getName()))
            .collect(Collectors.toList());
    return new Result(collect.size(), collect);
}

@Data
@AllArgsConstructor
static class MemberDto{
    private String name;
}

@Data
@AllArgsConstructor
static class Result<T>{
    private int count;
    private T data;
}

 

처음은 그냥 List형태로 반환. 그러면 지금 @RestController라서 리스트 같은 경우 json array 형태로 나감.

[
    {
        "id": 1,
        "name": "hello1",
        "address": null,
        "orders": []
    },
    {
        "id": 2,
        "name": "hello2",
        "address": null,
        "orders": []
    }
]

이런 식으로 나감.

 

두번째.

Dto로 변환. 나가든 받든 API는 꼭 Dto부류를 써야 함. 그래야 api스펙이 엔티티 바뀌었다고 바뀔 리가 없음.

여기서 신기한 건 Result<T>라는 제너릭을 정의함.

이게 좋은점이, 유연성이 생김.

추가로 더 넣고 싶은 정보를 집어넣을 수 있음.

{
    "count": 3,
    "data": [
        {
            "name": "hello1"
        },
        {
            "name": "hello2"
        },
        {
            "name": "hello3"
        }
    ]
}

이런 식이 됨.

나는 이런 거 많이 이용할 듯.

ok 등 제대로 응답되어진 것이 true인지.

error도 넣어서 에러 사항도 넣어주고. 등.

 

'스프링데이터 + JPA > API 개발' 카테고리의 다른 글

6. 지연로딩과 조회성능 최적화  (0) 2023.11.13
5. 조회용 샘플 데이터 입력  (0) 2023.11.12
4. API 성능 최적화  (0) 2023.11.12
2. 회원 수정 API  (0) 2023.11.12
1. 회원 등록 API  (0) 2023.11.12