웹 어플리케이션 서버
에서 값을 가져올 때
사용하는 API
실무에서는 HTTP 메서드에 따라 컨트롤러 클래스 구분 X
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
}
@RequestMapping을 설정하면 내부에 선언한 메서드의 URL 리소스 앞에 값을 공통으로 추가
이를 별다른 설정 없이 사용하면 HTTP 모든 요청을 받음
-> 보통 용도에 맞게 @PutMapping, @PostMapping 과 같은 어노테이션 사용
// http://localhost:8080/api/v1/get-api/variable1/{String 값}
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
@GetMapping(value = "/variable1/{variable}")
public String getHello(@PathVariable String variable ){
return variable;
}
}
@Getmapping의 어노테이션 값으로 URL을 입력할 때 중괄호를 통해 어느 위치에 값을 받을지 지정해야 함
@GetMapping의 어노테이션과 @PathVariable에 지정된 변수 이름 동일하게 맞춰야 함
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
@GetMapping(value = "/variable1/{variable}")
public String getHello(@PathVariable("variable") String var ){
return var;
}
}
@PathVariable에서 변수 이름을 특정!
Get요청을 보낼 때 URL 경로에 값을 담아서 보내는 방법 외 쿼리 형식으로 값을 전달할 수도 있음
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
@GetMapping(value = "/request1")
public String getHello(@RequestParam String name, @RequestParam String email,
@RequestParam String organization){
return name + " " + email + " " + organization;
}
}
?name = ... , email... 쿼리 형태로 요청
어떠한 값이 들어올지 모른다면 Map 객체
활용 가능
package com.springboot.api.controller;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
@GetMapping(value = "/request1")
public String getHello(@RequestParam Map<String, String> param){
System.out.println(param); // {name=value1, email=value2, organization=value3}
StringBuilder sb = new StringBuilder();
param.entrySet().forEach(map ->{
sb.append(map.getKey() + "가 키 값이고" + map.getValue() + "가 해당 값입니다. \n");
});
return sb.toString();
}
}
사용 예시
회원가입 관련 API에서 사용자는 회원 가입을 하면서 ID같은 필수 항목이 아닌 취미 같은 선택 항목에 대해서는 값을 기입하지 않는 경우 -> Map으로 받는 것이 효율적!
url
은 리소스가 어디있는지 알려 주는 경로,uri
는 특정 리소스를 식별할 수 있는 식별자
다른 레이어간 데이터 교환
에 사용
-> 각 클래스 및 인터페이스를 호출하면서 전달하는 매개변수로 사용되는 데이터 객체
별도의 로직 포함 X
package com.springboot.api.dto;
import lombok.Data;
@Data // Getter,Setter, tostring 자동 구현
public class MemberDto {
private String name;
private String email;
private String organization;
}
dto 클래스에 선언된 변수는 컨트롤러 메서드에서 쿼리 파라미터의 키와 매칭 됨
!!!!
받아야 할 파라미터가 많은 경우
코드의 가독성을 높이기 위해 사용
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
@GetMapping(value = "/request1")
public String requestParam(MemberDto memberDto){
// return memberDto.getName() + getEmail() 이럴 필요 X
return memberDto.toString();
}
}
보통은 DTO와 구분하지 않고 사용
VO는 데이터 자체로 의미가 있는 객체, 읽기 전용으로 설계 -> 값 변경 불가하게 만들어 신뢰성 유지