API에 사용하는 HTTP 메서드 어노테이션
스프링 4.3 이후로는 @RequestMapping 메서드는 사용하지 않고 아래 어노테이션들을 사용한다.
method 요소를 정의하지 않아도 된다.
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
@RestController 어노테이션이 지정된 클래스는 @RequestBody를 생략할 수 있다.
@RequestBody 어노테이션은 자동으로 JSON 형식의 값을 전달한다.
GET
서버에서 값을 가져올 때 사용하는 API
URL 경로나 파라미터에 변수를 넣어 요청한다.
1. @PathVariable을 이용한 GET 메서드 구현
ex) https://test.com/api/v1/get-api/variable1/{variable}
@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
return variable;
}
어노테이션 변수명과 메서드 매개변수의 이름을 동일하게 맞추기 어려울 때는 아래와 같이 사용한다.
@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable("variable") String var) {
return var;
}
2. @RequestParam을 이용한 GET 메서드 구현
ex) https://test.com/api/v1/get-api/variable1/test?name=value&email=value2
@GetMapping(value = "/variable1")
public String getRequestParam1(
@RequestParam String name,
@RequestParam String email) {
return name + " " + email;
}
쿼리스트링에 어떤 값이 들어올지 모른다면 Map 객체를 활용한다.
ex) 회원가입 시 선택항목에 대해서는 값을 기입하지 않는 경우에 효율적이다.
@GetMapping(value = "/variable1")
public String getRequestParam1(@RequestParam Map<String, String> param) {
StringBuilder sb = new StringBuilder();
param.entrySet().forEach(map -> {
sb.append(map.getKey() + ":" + map.getValue();
});
return sb.toString();
}
3. DTO를 이용한 GET 메서드 구현
DTO 클래스에 전달할 필드 객체를 선언하고 getter/setter 메서드를 구현한다.
ex) 받아야할 파라미터가 많은 경우 코드의 양을 줄이고 가독성을 높일 수 있다.
@GetMapping(value = "/variable1")
public String getRequestParam1(MemberDto memberDto) {
return memberDto.toString();
}
POST
데이터베이스 등에 리소스를 저장할 때 사용되는 API
저장하고자 하는 값을 HTTP body에 담아 서버에 전달한다.
1. RequestBody를 이용한 POST 메서드 구현
어떤 값이 들어오게될지 특정하기 어려울 때 Map 객체를 사용한다.
ex) https://test.com/api/v1/post-api/variable1/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());
});
return sb.toString();
}
2. DTO를 이용한 POST 메서드 구현
요청 메시지에 들어갈 값이 정해져 있다면 DTO 객체를 매개변수로 작성할 수 있다.
ex) https://test.com/api/v1/post-api/variable1/member
@PostMapping(value = "/member")
public String postMemberDto(@RequestBody MemberDto memberDto) {
return memberDto.toString();
}
PUT
데이터베이스 등에 존재하는 리소스값을 업데이트하는 API
1. RequestBody를 이용한 PUT 메서드 구현
어떤 값이 들어오게될지 특정하기 어려울 때 Map 객체를 사용한다.
ex) https://test.com/api/v1/put-api/variable1/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());
});
return sb.toString();
}
2. DTO를 이용한 PUT 메서드 구현
요청 메시지에 들어갈 값이 정해져 있다면 DTO 객체를 매개변수로 작성할 수 있다.
ex) https://test.com/api/v1/put-api/variable1/member
@PutMapping(value = "/member")
public String postMemberDto(@RequestBody MemberDto memberDto) {
return memberDto.toString(); // string 형태로 return
}
@PutMapping(value = "/member")
public MemberDto postMemberDto(@RequestBody MemberDto memberDto) {
return memberDto; // json 형태로 return
}
3. ResponseEntity를 이용한 PUT 메서드 구현
- HttpEntity, RequestEntity, ResponseEntity, HttpStatus
- HttpStatus.ACCEPTED : 202 응답코드
@PutMapping(value = "/member")
public ResponseEntity<MemberDto> postMemberDto(@RequestBody MemberDto memberDto) {
return ResponseEntity
.status(HttpStatus.ACCEPTED)
.body(nmemberDto)
}
DELETE
데이터베이스에 있는 리소스를 삭제하는 API
1. @PathVariable을 이용한 DELETE 메서드 구현
ex) https://test.com/api/v1/delete-api/variable1/{variable}
@DeletetMapping(value = "/variable1/{variable}")
public String DeleteVariable1(@PathVariable String variable) {
return variable;
}
2. @RequestParam을 이용한 DELETE 메서드 구현
ex) https://test.com/api/v1/delete-api/variable1/test?email=value
@DeletetMapping(value = "/test")
public String getRquestParam1(@RequestParam String email) {
return email;
}
'개발공부 > JAVA Spring' 카테고리의 다른 글
Lombok 롬복 - 반복적으로 사용하는 코드 작성을 생략하는 라이브러리 (0) | 2023.02.22 |
---|---|
[Spring Boot] 엔티티 관련 어노테이션 (0) | 2023.02.20 |
제어 역전 IoC, 의존성 주입 DI, 관점 지향 프로그래밍 AOP (0) | 2023.02.11 |
gradle dependencies 의존성 관리 알아보기 (0) | 2023.01.29 |
JPA ddl-auto 옵션 종류 (0) | 2023.01.25 |
댓글