이번 시간에는 스프링 Get Controller에 대해서 알아 보겠습니다.
Get 요청이 왔을 때 Controller에서 데이터를 내려 주는 여러가지 방식과 각종 어노테이션을 소개합니다.
단순 문자열 반환
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController // 해당 class는 REST API 처리하는 Controller
@RequestMapping("/api") // Requestmapping URI 를 지정해주는 Annotation
public class ApiController {
@GetMapping("/hello") // http://;ocallgjost:9090/api/hello
public String hello() {
return "hello spring boot";
}
}
스프링 부트 프로젝트에 ApiController라는 클래스를 만들어 주었습니다.
어노테이션부터 살펴 보겠습니다.
@RestController
REST API 처리하는 class라고 알려주는 어노테이션 입니다.
@RestController는 Spring MVC Controlle에 @ResponseBody가 추가된 것입니다. 당연하게도 RestController의 주용도는 Json 형태로 객체 데이터를 반환하는 것입니다.
출처: https://mangkyu.tistory.com/49 [MangKyu's Diary]
@ResponseBody를 붙여주지 않아도 됩니다.
@RequestMapping
요청 엔드포인트를 지정해주는 어노테이션 입니다.
예제에서는 'api'라고 지정 했는데 주소+/api규칙으로 호출 되면 어노테이션을 지정한 클래스가 실행 됩니다.
@GetMapping
HTTP메소드가 GET 요청일 경우 실행되는 메소드에 붙여 줍니다.
인자로 엔드포인트를 넣어줄 수 있습니다.
예제에서는 api/hello로 get 요청을 보내면 @GetMapping어노테이션을 단 hello()메소드가 실행 됩니다.
문자열 반환
문자열을 반환하려면 return문에 문자열을 적어주면 적어준 문자열을 반환합니다.
Path 파라미터
Controller에서 path파라미터를 받는 방법을 알아보겠습니다.
@RestController
@RequestMapping("/api/get")
public class GetApiController {
@GetMapping(path = "/hello") // http://localhost:9090/api/get/hello
public String Hello() {
return "get hello";
}
@RequestMapping(path = "/hi", method = RequestMethod.GET) // get htto://localhost:9090/api/hi
public String hi () {
return "hi";
}
}
위의 예제와 같은 경우는 패스파라미터를 변수로 받는 경우가 "아닌" 지정한 규칙대로 실행하게 하는 예제 입니다. .
@GetMapping은 위에서 설명했고
@RequestMapping을 사용해서 @GetMapping과 같은 방식으로 사용할 수 있습니다.
method = RequestMethod."HTTP메소드" 를 넣어주면 해당하는 HTTP메소드를 지정해줄 수 있습니다.
path파라미터를 변수로 받는 방법은 아래와 같습니다.
// http://localhost:9090/api/get/path-variable/{name}
// {} 안의 이름과 인자의 이름을
@GetMapping("/path-variable/{id}/{name}")
public String pathVariable (@PathVariable(name = "id") String pathName, @PathVariable(name = "name") String name) {
System.out.println("Pathvariable : "+pathName+name);
return pathName+name;
}
@GetMapping 어노테이션에 url규칙을 정할 때 path파라미터 변수가 될 부분을 {}안에 넣어 줍니다.
위의 예제에는 id와 name이 패스파라미터의 변수가 될 수 있습니다.
그 다음은 메소드의 인자에 @PathVariable을 집어넣어서 path파라미터로 들어온 변수 값을 메소드내에서 인자로 사용할 수 있습니다.
예제를 보며 설명해보자면
(@PathVariable(name = "id") String pathName
{id}에 들어온 변수는 pathName이라는 이름으로 받는다 라는 뜻입니다.
@PathVariable(name = "name") String name
또한 {name}안에 들어온 변수는 name이라는 이름으로 받는다는 뜻 입니다.
예제의 경우는 {}안의 값과 다른 이름으로 받을 때 사용하는 방법이고
{}안의 값과, 인자의 값과 이름이 같으면 (name= '')옵션은 생략해도 됩니다.
그냥 @PathVariable("name") String name 이런식으로 사용할 수 있습니다.
쿼리 파라미터
이번에는 쿼리 파라미터를 받는 방법에 대해서 알아보겠습니다.
@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();
}
@GetMapping("query-param02")
public String queryParam02(
@RequestParam String name,
@RequestParam String email,
@RequestParam int age
){
System.out.println(name);
System.out.println(email);
System.out.println(age);
return name+" "+email+" "+age;
}
위 에제는 쿼리파라미터를 받는 방법중 두가지 입니다.
하나는Map으로 받아서 반목문을 돌려서 키값과 벨류를 뽑아내는 방법이고
다른 하나는 지정한 쿼리 파라미터 변수값으로 값을 뽑아내는 방법입니다.
실무에서는 위 두가지의 방법 보다는 아래에서 소개 해주는 방법을 사용한다고 합니다.
@GetMapping("query-param03")
public String queryParam03(
UserRequest userRequest
){
System.out.println(userRequest.getName());
System.out.println(userRequest.getEmail());
System.out.println(userRequest.getAge());
return userRequest.toString();
}
인자에 UserRequest라는 클래스를 받아서 get메소드로 정보를 조회 합니다.
이 방식을 사용하려면 DTO(data access object)를 정의 해야 합니다.
public class UserRequest {
private String name;
private String email;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "UserRequest{" +
"name='" + name + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
}
인자에 사용할 DTO object는 각 멤버변수를 private로 선언하고
getter setter를 만들어서 사용해 줍니다.
toString을 만들어주면 Json으로 나가는 형식을 지정해 줍니다.
'스프링 입문' 카테고리의 다른 글
🍀 @JsonProperty (0) | 2021.10.23 |
---|---|
🍀 스프링 PostController (0) | 2021.10.23 |
🚀 장고와 🍀스프링 (0) | 2021.10.11 |
🍀 스프링 welcome page 연결하기 (0) | 2021.10.06 |
🍀 스프링 프로젝트 시작하기 (0) | 2021.10.05 |