POST형식의 요청은 클라이언트가 서버에 리소스를 저장하는 데 사용한다.
POST요청에서는 리소스를 담기 위해 HTTP Boday에 값을 넣어 전송한다.
Body영역에 작성되는 값은 일반적으로 JSON형식으로 전송된다.
@RequestBody는 HTTP의 Body내용을 해당 어노테이션이 지정된 객체에 매핑하는 역할을 한다.
Map객체는 요청을 통해 어떤 값이 들어오게 될지 특정하기 어려울 때 주로 사용한다.
EX) @RequestBody와 Map활용한 POST API구현
// http://localhost:8080/api/v1/post-api/member
@PostMapping(value = "/member")
public String postMember(@RequestBody Map<String, Object> postData) {
StringBuilder sb = new StringBuilder();
postData.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
요청 메세지에 들어갈 값이 정해져 있다면 DTO객체를 매개변수로 삼아 작성할 수 있다.
EX) DTO객체 활용한 POST API구현
// http://localhost:8080/api/v1/post-api/member2
@PostMapping(value = "/member2")
public String postMemberDto(@RequestBody MemberDto memberDTO) {
return memberDTO.toString();
}
PUT API는 웹 애플리케이션 서버를 통해 데이터베이스 같은 저장소에 존재하는 리소스 값을 업데이트하는 데 사용한다.
PUT API는 POST메서드와 마찬가지로 값을 HTTP Body에 담아 전달한다.
서버에서는 이 값을 받기 위해 @RequestBody를 사용한다.
MAP객체 활용: 서버에 어떤 값이 들어올지 모른는 경우
DTO객체 활용: 서버에 들어오는 요청에 담겨 있는 값이 정해져 있는 경우
EX) @RequestBody와 Map을 활용한 PUT 메서드 구현
// http://localhost:8080/api/v1/put-api/member
@PutMapping(value = "/member")
public String postMember(@RequestBody Map<String, Object> putData) {
StringBuilder sb = new StringBuilder();
putData.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
EX) DTO객체를 활용한 PUT메서드 구현
// http://localhost:8080/api/v1/put-api/member1
@PutMapping(value = "/member1")
public String postMemberDto1(@RequestBody MemberDto memberDto) {
return memberDto.toString();
}
// http://localhost:8080/api/v1/put-api/member2
@PutMapping(value = "/member2")
public MemberDto postMemberDto2(@RequestBody MemberDto memberDto) {
return memberDto;
}
HttpEntity : header 와 body로 구성된 HTTP요청과 응답을 구성하는 역할을 수행한다.
RequestEntity와 ResponseEntity는 HttpEntity를 상속받아 구현한 클래스이다.
ResponseEntity는 서버에 들어온 요청에 대해 응답 데이터를 구성해서 전달할 수 있게 한다. HttpEntity로부터 HttpHeaders와 Body를 가지고 자체적으로 HttpStatus를 구현한다.
EX) ResponseEntity를 활용한 PUT메서드 구현
// http://localhost:8080/api/v1/put-api/member3
@PutMapping(value = "/member3")
public ResponseEntity<MemberDto> postMemberDto3(@RequestBody MemberDto memberDto) {
return ResponseEntity
.status(HttpStatus.ACCEPTED)
.body(memberDto);
}
메서드의 리턴 타입을 ResponseEntity로 설정, 리턴값 만든다.
status에 넣을 수 있는 값은 다양. HttpStatus.ACCEPTED는 응답코드 202를 가지고 있다.
@PathVariable이용: URI에 포함된 값을 받아 로직을 처리할 수 있다.
@DeleteMapping어노테이션에 정의한 value의 이름과 메서드의 매개변수 이름을 동일하게 설정해야 삭제할 값이 주입된다.
// http://localhost:8080/api/v1/delete-api/{String 값}
@DeleteMapping(value = "/{variable}")
public String DeleteVariable(@PathVariable String variable) {
return variable;
}
@RequestParam 어노테이션 통해 쿼리스트링 값도 받을 수 있다.
// http://localhost:8080/api/v1/delete-api/request1?email=value
@DeleteMapping(value = "/request1")
public String getRequestParam1(@RequestParam String email) {
return "e-mail : " + email;
}