1. GetMapping사용하기
1
2
3
4
@GetMapping(path = "/hello")
public String hello(){
return "Hello";
}
2. RequestMapping사용하기
1
2
3
4
@RequestMapping(path = "/hi", method = RequestMethod.GET)
public String hi(){
return "hi";
}
- RequestMapping을 사용할 때 Method를 지정하지 않으면 GET, POST, PUT, DELETE 등 모든 Method가 동작된다. GET만 지정하고 싶을 때 method parameter를 지정해주면 된다.
3.path Variable
1
2
3
4
5
@GetMapping("/path-variable/{name}") // http://localhost/api/get/path-variable/{name}
public String pathVariable(@PathVariable String name){
System.out.println("pathVariable : " + name);
return name;
}
- GetMapping에서 적은 {}내부의 변수명과 함수의 parameter의 변수명이 같아야한다. (name)
- 만약 GetMapping에서 사용한 변수가 다른 식으로 사용할 필요가 있는경우 아래의 코드처럼 변수를 mapping해서 사용할 수 있다.
1
2
3
4
5
@GetMapping("/path-variable/{name}") // http://localhost/api/get/path-variable/{name}
public String pathVariable(@PathVariable(name = "name") String pathName){
System.out.println("pathVariable : " + pathName);
return pathName;
}
4.Query Param
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// http://localhost:8080/api/query-param?user=김민수&email=kmslkh@naver.com&age=28
@GetMapping(path = "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());
System.out.println("\n");
sb.append(entry.getKey() + " = " + entry.getValue() + "\n");
});
return sb.toString();
}
- 위와같이 Map을 사용해 받으면 어떤 Key가 들어있는지 확인할 수 없다.
- 아래의 코드처럼 명시적으로 지정하여 Query param을 받을 수 있다.
4-1 Query param2
1
2
3
4
5
6
7
8
@GetMapping("query-param02")
public String queryParam02(
@RequestParam String name,
@RequestParam String email,
@RequestParam int age
){
return name + " " + email + " " + age;
}
- 지정된 Type으로 요청하지 않으면 Bad Request Error가 발생한다. (ex int로 지정된 age에 문자열을 넣었을 때)
하지만 이런식으로 요청을 처리하면 Key,Value쌍이 늘어날 때마다 새로운 parameter를 추가해야한다.
→ 이런 문제를 해결하기 위해 Spring에서는 DTO형태로 mapping할 수 있게 해준다.
4-2 Query param3
- dto pacakge 생성, UserRequest Class 생성
1
2
3
4
5
6
7
8
9
10
11
package com.example.hello.dto;
@Getter
@Setter
@ToString
public class UserRequest {
private String name;
private String email;
private int age;
}
- API
1
2
3
4
@GetMapping("query-param03")
public String queryParam03(UserRequest userRequest){
return userRequest.toString();
}
- @RequestParam annotation을 작성할 필요없다. Query Param으로 들어온 key와 UserReuqest라는 Class의 변수들을 Spring이 매핑한다.
- Query Parameter로 들어오는 종류가 늘어날 경우 Class만 변경해주면 된다.