@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
@RequestMapping(value = "/hello", method = RequestMethod.GET) / /GET 요청만 받을 수 있게 설정
public String getHello(){
return "Hello World";
}
}
@RequestMapping
을 클래스에 걸어줄 시 하위 메소드에 자동으로 포함된다!
@GetMapping(value = "/name")
public String getName() {
return "Flature";
}
URI에 값을 담아 요청할 때 사용한다. 어디에서 값을 받아올 것인지 중괄호로 표시해야한다.
@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
return variable;
}
@GetMapping(value = "/variable2/{variable}")
public String getVariable2(@PathVariable("variable") String var) {
return var;
}
getVariable1
메소드는 {variable} 부분과 변수 부분의 이름이 같아야한다.
getVariable2
메소드는 {variable} 부분을 @PathVariable
에서 받고 변수의 이름은 따로 설정이 가능하다.
쿼리스트링 형태로 값을 전달할 때 @RequestParam
을 사용한다.
@GetMapping(value = "/request1")
public String getRP1(
@RequestParam String name,
@RequestParam String email,
@RequestParam String organization) {
return name + " " + email + " " + organization;
}
받아올 매개변수가 명확할 때 사용한다.
@GetMapping(value = "/request2")
public String getRP2(
@RequestParam Map<String,String> param) {
StringBuilder sb = new StringBuilder();
param.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "/n");
});
return sb.toString();
}
매개변수가 뭐가 들어올 지 모를 때 Map을 사용한다.
Map.entrySet() : Map 전체를 순회하는 메서드로 키, 값이 모두 필요할 때 사용한다.
DTO : 다른 레이어 간 데이터 교환에 활용되는 데이터 객체
@GetMapping(value="/request3")
public String getRP3(MemberDto memberDto){
return memberDto.toString();
}
쿼리스트링의 키가 정해져있지만 파라미터가 많을 시 가독성을 높힐 수 있다
POST 형식 요청은 클라이언트 서버에 리소스를 저장하는 데 사용하며 이때 HTTP BODY에 값을 넣어 전송한다.
보통 JSON 형식으로 전송되며 Talend에서도 이를 지원하기 위해 BODY에 값 입력이 가능하다.
GET 매핑과 동일하게 사용된다.
@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();
}
GET 매핑과 동리하게 사용된다.
웹 애플리케이션 서버를 통해 DB 같은 저장소에 존재하는 리소스 값을 업데이트하는 데 사용한다. HTTP BODY를 사용해 서버에 전달하기 때문에 POST API와 비슷하다.
POST API처럼 RequestBody를 사용한다.
@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();
}
@PutMapping(value="/member1")
public String postMemberDto1(@RequestBody MemberDto memberDto){
return memberDto.toString();
}
@PutMapping(value="/member2")
public MemberDto postMemberDto2(@RequestBody MemberDto memberDto){
return memberDto;
}
postMemberDto1
postMemberDto2
는 리턴 타입이 다른데 아래와 같이 Dto 타입으로 리턴해 줄 때는 JSON 형식으로 전달된 것을 확인할 수 있따.
HttpEntity
클래스는 Header와 Body로 구성된 HTTP 요청, 응답을 구성하는 역할을 수행RequestEntity
, ResponseEntity
는 HttpEntity
를 상속받은 클래스 ResponseEntity
는 Header와 Body를 가지고 자체적으로 HttpStatus를 구현하며 응답코드 변경 및 Header와 Body를 쉽게 구성할 수 있다 @PutMapping(value="/member3")
public ResponseEntity<MemberDto> postMemberDto3(@RequestBody MemberDto memberDto){
return ResponseEntity
.status(HttpStatus.ACCEPTED)
.body(memberDto);
}
리소스를 식별할 수 있는 값을 받아 리소스를 조회하고 삭제하는 역할을 수행하기 때문에 GET 메서드처럼 URI에 값을 넣어 요청 받는 형식으로 구현된다.
API 개발 시 명세를 도와주는 오픈소스 프로젝트로 해당 API와 매개변수에 대한 설명을 추가해 확인할 수 있다.
logging : 애플리케이션이 동작하는 동안 상태, 동작 정보를 시간 순으로 기록하는 것을 의미
Logback은 로깅 프레임워크로 로깅 레벨 및 로그의 형태를 설정, 출력하는 방법에 대해 설정할 수 있다.
@RequestMapping
을 클래스에 걸어줄 시 하위 메소드에 자동으로 포함된다!@RequestMapping
을 사용해 일일히 method를 설정할 필요 없이 해당 요청에 맞는 Mapping 어노테이션을 사용해주면 편하다.