07장. 요청 파라미터 취득하기

박근수·2024년 4월 7일
0

스프링 북스터디

목록 보기
7/8
post-custom-banner

요청 파라미터의 종류

요청 파라미터란?

서버에 전송되는 값을 요청 파라미터(request Parameter)라고함.

요청 파라미터의 종류
요청 파라미터내용
요청 쿼리 스트링(query string)으로 보내지는 값
HTTP 메서드 : GET으로 서버로 데이터 전송
요청 본문(body)에 저장되어 보내지는 값
HTTP 메서드 : POST로 서버로 데이터 전송
뷰에서 입력값 및 선택한 값이나 숨김 파라미터(hiidden parameter)등에서 미리 뷰에 입력해준 값 등
뷰에서 클릭한 버튼의 name 속성값하나의 뷰에 버튼이 여러 개 있을 때 어느 버튼인지 판변할 수 있는 값
URL 경로(path)의 일부로 보내지는 값링크 등으로 URL의 일부로 보내지는 값

요청 파라미터의 취득 방법

방법내용
@RequestParam 사용@RequestParam 어노테이션을 이용해 파라미터를 하나씩 취득
Form 클래스 사용 (따로 만들어야함)스프링 MVC가 Form클래스 내의 필드에 대해 값을 저장. 요청 파라미터를 모아서 하나의 객체로 받아들이기 때문에 자주 사용되는 방법. 받을 때는 '형변환'이나 포맷지정이 가능

링크 등 URL의 일부로 포함된 값을 취득할 떄는 요청 매핑 어노테이션의 value 속성에 값이 저장된 경로를 지정하고 요청 핸들러 메서드의 인수에 @PathVariable 어노테이션과 값을 저장할 인수를 지정함.

입력값을 받는 프로그램 만들기 (@RequestParam)

프로젝트 생성

  • Spring Boot DevTools(개발 툴)
  • Lombok(개발 툴)
  • Thymeleaf(템플릿 엔진)
  • Spring Web(웹)

컨트롤러와 뷰 생성

컨트롤러
@Controller
public class RequestParamController {
    //입력 화면을 표시
    @GetMapping("show")
    public String showView(){
        //반환값으로 뷰 이름을 돌려줌
        return "entry";
    }
<body>
<form th:action="@{/confirm}" method="post">
    <div>
        <label for="name">이름 : </label>
        <input type="text" name = "name">
    </div>
    <div>
        <label for="age">나이 : </label>
        <input type="number" name="age" min="1" max="100">
    </div>
    <div>
        <label for="birth">생년월일 : </label>
        <input type="date" name="birth">
    </div>
    <input type="submit" value="전송">
</form>

</body>

타임리프를 사용한다고 선언을 하고 th:action="@{/confirm}"은 URL로 보낸다는 뜻

컨트롤러에 추가

 //확인 화면을 표시
    @PostMapping("confirm")
    public String confirmView(
            Model model, @RequestParam String name, @RequestParam Integer age,
            @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @RequestParam LocalDate birth
            ){
        //Model에 저장
        model.addAttribute("name",name);
        model.addAttribute("age", age);
        model.addAttribute("birth", birth);

        //반환값으로 뷰 이름을 돌려줌
        return "confirm";

뷰 생성(확인 화면)

<body>
  <ul>
    <li>이름 : [[${name}]]</li>
    <li>나이 : [[${age}]]</li>
    <li>생년월일 : [[${birth}]]</li>
  </ul>
</body>

입력값을 받는 프로그램 만들기(Form 클래스)

Form 클래스 생성

@Data
public class Form {
    private String name;
    private Integer age;
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate birth;
}

컨트롤러 수정 및 추가

//확인 화면을 표시 : Form 클래스용
    @PostMapping("confirm")
    public String confirmView(Form f){
        //반환 값으로 뷰이름을 돌려줌
        return "confirm2";
    }

뷰 생성(확인 화면 Form클래스 사용)

<body>
  <ul>
    <li>이름 : [[${form.name}]]</li>
    <li>나이 : [[${form.age}]]</li>
    <li>생년월일 : [[${form.birth}]]</li>
  </ul>
</body>

URL에 포함된 값을 받는 프로그램 만들기

프로젝트 생성

  • Spring Boot DevTools(개발 툴)
  • Thymeleaf(템플릿 엔진)
  • Spring Web(웹)

컨트롤러 생성

@Controller
public class PathVariableController {
   //화면 표시
   @GetMapping("show")
   public String showView(){
       //반환값으로 뷰 이름을 돌려줌
       return "show";
   }
}

뷰 생성

<div>
  <!--URL에 값 넣기-->
    <h3><a href="@{/function/1}">기능-1</a></h3>
    <h3><a href="@{/function/2}">기능-2</a></h3>
    <h3><a href="@{/function/3}">기능-3</a></h3>
  <!--같은 form태그 안에 포함된 여러 개의 버튼-->
    <form action="@{/send}" method="post">
      <input type="submit" value="버튼A" name="a">
      <input type="submit" value="버튼B" name="b">
      <input type="submit" value="버튼C" name="c">
    </form>
  </div>
컨트롤러에 추가(링크 처리)
//링크처리
    @GetMapping("/function/{no}")
    public String selectFunction(@PathVariable Integer no){
        //뷰 이름 초기화
        String view = null;
        switch (no){
            case 1 :
                view = "pathvariable/function1";
                break;
            case 2 :
                view = "pathvariable/function2";
                break;
            case 3 :
                view = "pathvariable/function3";
                break;
        }

        //반환값으로 뷰 이름을 돌려줌
        return view;
    }

뷰 생성(기능 화면)

<head>
    <meta charset="UTF-8">
    <title>기능 n</title>
</head>
<body>
  <h1>기능 n의 화면</h1>
</body>
profile
개발블로그
post-custom-banner

0개의 댓글