1. SPRING BOOT 특징
- SPRING BOOT APP에는 SPRING 구성이 거의 필요하지 않다
- java -jar로 실행하는 java APP을 만들 수 있다
- XML 구성 요구사항이 전혀 없음
- TOMCAT이 내장되어있어 따로 설치 필요X
- 지원 Build Tool : Gradle 4.x & 5.x, maven
- 지원 Survlet Tool : Tomcat 9.x, Jetty, Undertow, Netty
2. REST API
- 어노테이션을 통해 Controller에서 Path와 PathVariable, Query parameter를 Mapping 할 수 있다.
- Mapping 방식 3가지
@RestController
@RequestMapping("/api")
public class ApiController {
// http://localhost:9090/api/get/hello/path1
@RequestMapping(path = "/hello", method = RequestMethod.GET) // method 미지정시 모든 rest api 받는다
public String hi(){
return "hello";
}
@GetMapping(path = "/hello")
public String getHello(){
return "hello";
}
@GetMapping("/hello/{pathname}")
public String pathVariable(@PathVariable(name = "pathname") String name){
return name;
}
}
1) GET
- Databody가 없기 때문에 Query Parameter를 사용한다.
@RestController
@RequestMapping("/api")
public class ApiController {
// http://localhost:9090/api/get/something
@GetMapping("/path-variable/{pathname}")
public String pathVariable(@PathVariable(name = "pathname") String name){ // pathVariable 이름 통일이 안되었을 때 name = "pathname" 처럼 명시필요
System.out.println("PathVariable : " + name);
return name;
}
// http://localhost:9090/api/get/query-param?user=steve&email=steve@gmail.com
@GetMapping("/query-param")
public String queryParam(@RequestParam Map<String, String> queryParam){
StringBuilder sb = new StringBuilder();
queryParam.entrySet().forEach(entry ->{
System.out.println(entry.getKey());
System.out.println(entry.getValue());
sb.append(entry.getKey() + " = " + entry.getValue() + "\n");
});
return sb.toString();
}
// 명시적인 requestParam 설정 -> 설정된 requestParam 없을 시 에러
@GetMapping("query-param02")
public String queryparam02(@RequestParam String name, @RequestParam int age){
return name + " " + age;
}
// dto를 통한 requsetParam 수신 -> 위처럼 설정된 reuqestParam이 없어서 나는 에러가 나지 않는다
@GetMapping("query-param03")
public String queryparam03(UserRequest userRequest){ // 객체를 받을 시, @RequestMapping을 붙이지 않는다.
// Boot가 자동적으로 query param과 객체의 변수와 이름 매칭을 해줌
return userRequest.toString();
}
}
2) POST
* JSON
key : value | |
string | value |
number | value |
boolean | value |
object | value { pair of key, value } |
array | value [ object ] |
// Controller
@RestController
@RequestMapping("/api")
public class ApiController {
@PostMapping("/post")
public void post(@RequestBody PostRequestDto requestData){ // requestBody를 사용할 수 있기 때문에 RequestParam 사용 지양
System.out.println(requestData);
}
}
* JSON Naming
변수 이름에 있어서 Snake case, Camel case를 수용할 수 있어야함
예를 들어 phone_number로 보냈는데 백엔드에서 변수 이름이 phoneNumber이면 매칭이 안됨
// 1. JsonProperty 사용
@JsonProperty("phone_number")
private String phoneNumber; // phone_number도 매칭
// 2. JsonNaming 사용
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) // Snake case로 들어온 변수를 Camel case 변수에 매칭가능하도록 해줌
public class somethingDto { ... }
위와 같은 방법으로 Snake <-> Camel간 수용 가능
3) PUT
POST와 유사
4) DELETE
GET과 유사
'프로그래밍 > SPRING' 카테고리의 다른 글
[SPRING] IOC, DI, COMPONENT, BEAN, AOP (0) | 2021.10.25 |
---|---|
[SPRING] Response, ObjectMapper (0) | 2021.09.09 |
[SPRING] 웹 개발 개론 (0) | 2021.08.16 |
[SPRING] 객체지향 (0) | 2021.08.16 |
[SPRING] 계속 추가되는 스프링 관련 정리 (0) | 2021.08.10 |