@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 |