[Spring] 뷰에서 컨트롤러로 데이터 전달하기

rekv·2025년 2월 4일

Spring

목록 보기
4/15

컨트롤러 만들고 url 매핑하기

@RestController
@RequestMapping("/test")
public class TestController{
}

Controller 클래스 위에 @RestController@RequestMapping("/요청url")을 작성

GET

GET의 경우 @GetMapping("/요청url")을 메소드 상단에 붙인다.

1. @RequestParam

@RestController
@RequestMapping("/test")
public class TestController{
  @GetMapping("/ex01")
  //int data01 앞에 @ReqeustParam이 생략되어있어, 알아서 변수에 요청 파라미터 값이 설정된다.
  public String ex01(int data01, String data02) {
    System.out.println(data01);
    System.out.println(data02);
    return "ex01";
  }
}

@RequestParam은 따로 붙이지 않아도 생략되어 붙으므로 매개변수만 작성해주면 된다.
입력 폼 : http://localhost:8080/test/ex01?data01=123&data02=qwer

2. 입력받는 변수에 Dto 이용

  //변수가 많아지면 여러 변수를 다 저장할 수 있는 클래스를 만들어서 사용 = DTO
@RestController
@RequestMapping("/test")
public class TestController{
  @GetMapping("/ex02")
  public String ex02(DataDto dataDto) {
    System.out.println(dataDto.getData01());
    System.out.println(dataDto.getData02());
    System.out.println(dataDto.getData03());
    System.out.println(dataDto.getData04());
    System.out.println(dataDto.getData05());
    return "ex02";
  }
}

DataDto 클래스를 통해 선언한 변수에 자동으로 저장되도록 설정
입력 폼 : http://localhost:8080/test/ex01?data01=1&data02=2

콘솔을 보면 data1과 data2는 각각 1과 2가, 나머지는 값을 입력하지 않아 0으로 저장된 것을 확인할 수 있다.

3. @PathVariable

@RestController
@RequestMapping("/test")
public class TestController{
  //경로에 데이터를 포함시키는 방법
  //단, 많은 데이터가 아니라 간단한 숫자 또는 문자 한두 개 정도
  @GetMapping("/ex05/{id}")
  public String ex05(@PathVariable int id) {
    System.out.println(id);
    return "ex05";
  }
}

입력 폼 : http://localhost:8080/test/ex05/1
?=가 아닌 / 하나만으로도 id에 데이터가 삽입된다.

@PathVariable은 POST 방식에서도 사용 가능하다.

4. 응답 자체를 Dto로 구성

@RestController
@RequestMapping("/test")
public class TestController{
  // 응답용 DTO 클래스를 만들고 객체를 생성,
  // 객체의 변수에 값을 저장하고 컨트롤러의 메소드가 return하면 알아서 json 형태로 변경해준다.
  @GetMapping("/ex01")
  public ResponseDto ex01() {
    ResponseDto responseDto = new ResponseDto();
    responseDto.setId(1);
    responseDto.setName("test01");
    responseDto.setMessage("zzzzzz");

    return responseDto;
    }
}

이는 사용자에게서 parmas를 받는다기 보다는 해당 Controller가 수행되면서 서버 자체에서 세팅한 값을 전달할 때 사용할 수 있다. (1-3중 편한 방법을 선택해 params를 받는 형식으로도 변환 가능)

POST

POST의 경우 @PostMapping("/요청url")을 메소드 상단에 붙인다.

POST방식은 클라이언트가 HTTP Body에 데이터를 포함시켜서 보낸다.

1. 기본적인 형태 (form-data)

@RestController
@RequestMapping("/test")
public class TestController{
  @PostMapping("/ex03")
  public String ex03(int data01, String data02) {
    System.out.println(data01);
    System.out.println(data02);
    return "ex03";
  }  
}

그냥 매개변수로 보낼 때 클라이언트는 form-data 형태로 보내야한다.

2. JSON (@RequestBody)

@RestController
@RequestMapping("/test")
public class TestController{
  @PostMapping("/ex04")
  public String ex04(@RequestBody DataDto dataDto) {
    System.out.println(dataDto.getData01());
    System.out.println(dataDto.getData02());
    return "ex04";
  }
}

@RequestBody 없이 데이터를 보냈을 때 오류가 나는 모습

@RequestBody를 붙여 정상적으로 데이터가 들어오는 모습

클라이언트가 HTTP Body에 JSON 형태의 데이터를 보내려면 매개변수 앞에 @RequestBody를 추가해야한다.

전체 코드

@RestController
@RequestMapping("/test03")
public class Test03Controller {
  //클라이언트로부터 데이터를 전달받는 방법
  //매개변수를 이용하는 방법
  @GetMapping("/ex01")
  //int data01 앞에 @ReqeustParam이 생략되어있어, 알아서 변수에 요청 파라미터 값이 설정된다.
  public String ex01(int data01, String data02) {
    System.out.println(data01);
    System.out.println(data02);
    return "ex01";
  }

  //변수가 많아지면 여러 변수를 다 저장할 수 있는 클래스를 만들어서 사용 = DTO
  @GetMapping("/ex02")
  public String ex02(DataDto dataDto) {
    System.out.println(dataDto.getData01());
    System.out.println(dataDto.getData02());
    System.out.println(dataDto.getData03());
    System.out.println(dataDto.getData04());
    System.out.println(dataDto.getData05());
    return "ex02";
  }

  //POST방식은 클라이언트가 HTTP Body에 데이터를 포함시켜서 보낸다.
  //그냥 매개변수로 받을 때 클라이언트가 form-data 로 보내야지 받을 수 있다.
  @PostMapping("/ex03")
  public String ex03(int data01, String data02) {
    System.out.println(data01);
    System.out.println(data02);
    return "ex03";
  }

  //클라이언트가 HTTP Body에 JSON 형태로 데이터를 포함해서 보내면
  //매개변수 앞에 @RequestBody를 추가해야한다.
  @PostMapping("/ex04")
  public String ex04(@RequestBody DataDto dataDto) {
    System.out.println(dataDto.getData01());
    System.out.println(dataDto.getData02());
    return "ex04";
  }

  //경로에 데이터를 포함시키는 방법
  //단, 많은 데이터가 아니라 간단한 숫자 또는 문자 한두 개 정도
  @GetMapping("/ex05/{id}")
  public String ex05(@PathVariable int id) {
    System.out.println(id);
    return "ex05";
  }
}

0개의 댓글