@RestController
- @Controller + @ResponseBody 가 결합된 어노테이션
- 컨트롤러 클래스 하위 메서드에 @ResponseBody 어노테이션을 붙이지 않아도 문자열과 JSON 등을 전송 가능
- View를 거치치 않고 HTTP ResponseBody에 직접 Return 값을 담아서 보낸다.
@RequestMapping
- MVC의 핸들러 매핑을 위해서 사용한다.
- 클래스와 메소드의 RequestMapping 을 통해URL을 매핑하여 경로를 설정 및 해당 메서드 처리가능
method : GET, POST , DELETE , PUT, PATCH
스프링 4.3 부터 메소드를 지정하는 방식을 간단하게 사용가능하다.
- @GetMapping
- @PostMapping
- @DeleteMapping
- @PutMapping
- @PatchMapping
Get API
@PathVariable
- GET 형식의 요청에서 파라미터를 전달하기 위해 URL 에 값을 담아 요청하는 방법
@RequestParam
- GET 형식의 요청에서 쿼리 문자열을 전달하기 위해 사용되는 방법
- ? 를 기준으로 key - value 형태로 전달되며, 복수 형태로 전달할 경우 & 를 사용
- 어떤 요청이 들어올지 모르는 경우 사용 ( Map 사용 )
DTO
- 데이터 전송을 위해 사용되는 데이터 컨테이너
현재는 전부 header 부분은 text/plain 방식이다.
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
// http://localhost:8080/api/v1/get-api/hello
@GetMapping("/hello")
public String getHello() {
return "Hello World";
}
// http://localhost:8080/api/v1/get-api/variable1/String값
@GetMapping("/variable1/{variable}")
public String getVariable1(@PathVariable("variable") String variable) {
return variable;
}
// http://localhost:8080/api/v1/get-api/variable2/String값
@GetMapping("/variable2/{variable}")
public String getVariable2(@PathVariable("variable") String var) {
return var;
}
// http://localhost:8080/api/v1/get-api/request1?name=홍길동&email=test@naver.com&organization=테스트
@GetMapping("/request1")
public String getRequestParam1(
@RequestParam String name,
@RequestParam String email,
@RequestParam String organization) {
return name + " " + email + " " + organization;
}
// 파라미터에 어떤 값이 들어올지 모를때 Map 을 사용
// http://localhost:8080/api/v1/get-api/request2?name=홍길동&email=test@naver.com&organization=테스트
@GetMapping("/request2")
public String getRequestParam2(@RequestParam Map<String, String> param) {
StringBuilder sb = new StringBuilder();
param.entrySet().forEach(map -> sb.append(map.getKey() + " : " + map.getValue() + "\n"));
return sb.toString();
}
// http://localhost:8080/api/v1/get-api/request3?name=홍길동&email=test@naver.com&organization=테스트
@GetMapping("/request3")
public String getRequestParam3(MemberDto memberDto) {
return memberDto.toString();
}
}
package studio.thinkground.testproject.dto;
import lombok.Data;
@Data
public class MemberDto {
private String name;
private String email;
private String organization;
}
Post API
- 리소스를 추가하기 위해 사용되는 API
- 일반적으로 추가하고자 하는 Resource를 http body에 추가하여 서버에 요청
- @ReqeustBody를 이용하여 body에 담겨있는 값을 받아야한다.
-> 클라이언트의 요청 트래픽에 값이 포함되어있다.
@RestController
@RequestMapping("/api/v1/post-api")
public class PostController {
// http://localhost:8080/api/v1/post-api/default
@PostMapping("/default")
public String postMethod() {
return "Hello World";
}
// http://localhost:8080/api/v1/post-api/member
@PostMapping("/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();
}
// http://localhost:8080/api/v1/post-api/member2
@PostMapping("/member2")
public MemberDto PostMemberDto(@RequestBody MemberDto memberDto) {
return memberDto;
}
}
JSON 형식 테스트
Put API
- 해당 리소스가 존재하면 갱신하고, 리소스가 없을 경우에는 새로 생성해주는 API
- 업데이트를 위한 메소드
@RestController
@RequestMapping("/api/v1/put-api")
public class PutController {
// http://localhost:8080/api/v1/put-api/default
@PutMapping("/default")
public String putMethod() {
return "Hello World";
}
// http://localhost:8080/api/v1/put-api/member1
@PutMapping("/member1")
public String postMemberDto1(@RequestBody MemberDto memberDto) {
return memberDto.toString();
}
// http://localhost:8080/api/v1/put-api/member2
// JSON 형식으로 전달
@PutMapping("/member2")
public MemberDto postMemberDto2(@RequestBody MemberDto memberDto) {
return memberDto;
}
// http://localhost:8080/api/v1/put-api/member3
// JSON 형식으로 전달
@PutMapping("/member3")
public ResponseEntity<MemberDto> postMemberDto3(@RequestBody MemberDto memberDto) {
return ResponseEntity.status(HttpStatus.ACCEPTED).body(memberDto);
// return new ResponseEntity<>(memberDto, HttpStatus.ACCEPTED);
}
}
Delete API
- 서버를 통해 리소스를 삭제하기 위해 사용되는 API
- 일반적으로 @PathVariable 을 통해 리소스 ID 등을 받아 처리한다.
@RestController
@RequestMapping("/api/v1/delete-api")
public class DeleteController {
@DeleteMapping("/delete/{variable}")
public String DeleteVariable(@PathVariable String variable) {
return variable;
}
}
++ ResponseEntity : status를 디테일하게 수정가능
- HttpEntity 라는 클래스를 상속받아 사용하는 클래스
- 사용자의 HttpRequest에 대한 응답 데이터를 포함
HttpStatus / HttpHeaders / HttpBody
'Spring > Spring-detail' 카테고리의 다른 글
ORM 이란 무엇일까? (0) | 2022.09.15 |
---|---|
Lombok 알고 사용하자! (0) | 2022.09.15 |
디자인 패턴 간략히 알아보기 (0) | 2022.09.14 |
빌드 관리 도구 ( Gradle / Maven ) (0) | 2022.09.14 |
좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2022.09.14 |
댓글