@Data
public class Member {
private Long id;
private String name;
private String dept;
public Member(String name, String dept) {
this.name = name;
this.dept = dept;
}
}
@Slf4j
@Repository
public class MemberRepository {
private static Map<Long, Member> store = new HashMap<>(); //static 사용
private static long sequence = 0L; //static 사용
public Member save(Member member) {
member.setId(++sequence);
log.info("save: member={}", member);
store.put(member.getId(), member);
return member;
}
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
public Optional<Member> findByLoginId(String loginId) {
return findAll().stream()
.filter(m -> m.getId().equals(loginId))
.findFirst();
}
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
public void clearStore() {
store.clear();
}
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BasicResponse {
private Integer code;
private HttpStatus httpStatus;
private String message;
private Integer count;
private List<Object> result;
}
@RequestMapping("/api")
@RestController
@RequiredArgsConstructor
public class ApiController {
private final MemberRepository memberRepository;
@GetMapping("/{id}")
public ResponseEntity<BasicResponse> find(@PathVariable Long id) {
BasicResponse basicResponse = new BasicResponse();
Optional<Member> member = memberRepository.findById(id);
if (member.isPresent()) {
basicResponse = BasicResponse.builder()
.code(HttpStatus.OK.value())
.httpStatus(HttpStatus.OK)
.message("사용자 조회 성공")
.result(Arrays.asList(member.get()))
.count(1).build();
} else {
basicResponse = BasicResponse.builder()
.code(HttpStatus.NOT_FOUND.value())
.httpStatus(HttpStatus.NOT_FOUND)
.message("사용자를 찾을 수 없습니다.")
.result(Collections.emptyList())
.count(0).build();
}
return new ResponseEntity<>(basicResponse, basicResponse.getHttpStatus());
}
@GetMapping("/all")
public ResponseEntity<BasicResponse> list() {
List<Member> memberList = memberRepository.findAll();
BasicResponse basicResponse = BasicResponse.builder()
.code(HttpStatus.OK.value())
.httpStatus(HttpStatus.OK)
.message("전체 사용자 조회 성공")
.result(new ArrayList<>(memberList))
.count(memberList.size()).build();
return new ResponseEntity<>(basicResponse, HttpStatus.OK);
}
}
package com.example.responseApi;
@Component
@RequiredArgsConstructor
public class TestDataInit {
private final MemberRepository memberRepository;
@PostConstruct
public void init() {
memberRepository.save(new Member("Cristoval", "back-end"));
memberRepository.save(new Member("Aaron", "front-end"));
}
}
http://localhost:8080/api/0
{
"code": 404,
"httpStatus": "NOT_FOUND",
"message": "사용자를 찾을 수 없습니다.",
"count": 0,
"result": []
}
http://localhost:8080/api/1
{
"code": 200,
"httpStatus": "OK",
"message": "사용자 조회 성공",
"count": 1,
"result": [
{
"id": 1,
"name": "Cristoval",
"dept": "back-end"
}
]
}
http://localhost:8080/api/all
{
"code": 200,
"httpStatus": "OK",
"message": "전체 사용자 조회 성공",
"count": 2,
"result": [
{
"id": 1,
"name": "Cristoval",
"dept": "back-end"
},
{
"id": 2,
"name": "Aaron",
"dept": "front-end"
}
]
}
2xx
Successful: 요청 정상 처리
Code
3xx
Redirection: 요청을 완료를 위해 추가 행동 필요
Redirect
Code
4xx
Client Error
Code
5xx
Server Error
Code