본문 바로가기
Spring

Spring_요청핸들러 메소드, Mapping(GET, POST)

by 유서담 2024. 3. 19.

요청 핸들러 메소드

  • HTTP 요청을 처리하는 메소드
  • 컨트롤러 클래스에 정의한다
  • @RequestMapping, @GetMapping, @PostMapping 어노테이션으로 특정한 HTTP 요청과 매핑된다
    • 클라이언트의 HTTP 요청을 처리
    • 요청처리를 위해 업무로직 메소드를 호출
    • 뷰에 모델을 전달
    • HTTP 요청처리 후 이동할 뷰페이지 혹은 재요청 URL을 프론트 컨트롤러로 반환

 

 

요청 핸들러 메소드의 시그니처

 

반환타입

String : 뷰 이름을 반환한다. JSP 기반의 웹 애플리케이션에서는 JSP 페이지의 경로 및 이름이다

반환값이 "redirect:" 로 시작하면 재요청 URL을 반환하는 것

 

매개변수

기본자료형 타입 : 요청파라미터 값을 매개변수에 바인딩한다

 

요청
http://localhost/list?page=1&opt=title&keyword=자바

요청핸들러 메소드
public String list(int page, String opt, String keyword) {
	...
}

매개변수 page에는 1이, opt에는 title이, keyword에는 자바가 바인딩된다
필요한 경우 문자열을 정수로 변환한다
단, 매개변수에 지정한 이름과 동일한 이름의 요청파라미터값이 없으면 오류가 발생한다

 

 

@RequestParam : 요청파라미터 값을 매개변수로 바인딩한다

속성값을 이용하면 요청파라미터와 매개변수 바인딩을 제어할 수 있다

 

주요속성

name : 요청파라미터 이름을 지정

required : 요청파라미터 필수여부를 지정한다. 기본값은 true. false로 지정하면 매개변수와 바인딩되는 요청파라미터 없어도 상관없다

 

defaultValue : 요청파라미터가 없을 때 매개변수에 바인딩할 기본값이다. 반드시 문자열로만 값을 설정한다

기본값을 지정하지 않으면 null값이 매개변수에 바인딩된다.

매개변수의 타입이 String인 경우에 null값이 바인딩되어도 상관없지만, 매개변수의 타입이 int, long, double인 경우에는 반드시 기본값을 지정한다

요청
http://localhost/list?page=1&opt=title&keyword=자바

요청핸들러 메소드
@GetMapping(path ="/list")
public String list(@RequestParam("page") int page,
		   @RequestParam(name ="opt", required = false) String opt,
		   @RequestParam(name ="keyword", required = false) String keyword {
	...
}

 

 

Model : 뷰에 전달한 값을 저장한 객체

Spring MVC는 요청핸들러 메소드의 매개변수에 Model이 정의되어 있으면 Model 타입의 객체를 생성해서 바인딩

Model 객체는 요청핸들러 메소드가 뷰에서 표현할 정보를 전달할 때 사용하는 객체

Model 객체에 저장된 값은 JSP로 내부 이동하기 전에 HttpServletRequest 객체에 속성으로 저장된다

@GetMapping("/")
public String home(Model model) {
	return "home";
}
					
home.jsp
<h1>홈</h1>
<p>${msg }</p>

 

 

Form 객체 : 폼 입력값을 저장하는 객체

요청핸들러 메소드는 Form 객체를 매개변수로 사용할 수 있다

Spring MVC는 요청핸들러 메소드에 Form 객체가 정의되어 있으면 폼 입력값을 저장하기 위한 객체로 사용한다

 

 

Form 객체를 처리하는 순서

  1. 요청 핸들러 메소드의 매개변수를 조사한다
  2. 요청핸들러 메소드의 매개변수에 Form객체가 정의되어 있으면, Form객체를 생성한다. 예시에서는 (ProductCreateForm객체를 생성)
  3. ProductCreateForm객체의 설계도 정보를 분석(멤버변수명, 멤버변수타입 등)
  4. 요청객체의 요청파라미터에서 멤버변수 이름과 동일한 이름의 요청파라미터값을 조회
  5. 조회된 요청파라미터값을 적절한 타입으로 변환한 다음, Form객체의 Setter메소드를 호출해서 값을 저장한다. 모든 멤버변수에 대해서 이 작업을 수행
  6. 요청핸들러 메소드를 실행할 때, 요청파라미터값이 저장된 Form객체를 매개변수에 전달한다
<form method="post" action="create">
	상품이름 : <input type="text" name="name">
	상품가격 : <input type="text" name="price">
	상품수량 : <input type="text" name="stock">
	<button>등록</button>
</form>

public class ProductCreateForm {
	String name;
	int price;
	int stock;
}

@PostMapping("/create")
public String create(ProductCreateForm form) {
	...						
}

 

 

 

@RequestMapping

 

HTTP 요청과 요청핸들러 메소드를 매핑하는 어노테이션. 요청방식을 지정하지 않으면 요청방식과 상관없이 매핑된다

 

주요속성

path : 요청 URI를 지정

value : 요청 URI를 지정
method : 요청방식을 지정한다. GET, POST, METHOD, PUT
params : 요청파라미터값으로 매핑을 지정한다

 

@RequestMapping	(path= "/abc", method=RequestMethod.GET)
요청 URL가  "abc"이고, 요청방식이 GET인 요청과 매핑된다

@RequestMapping	(path= "/abc", method=RequestMethod.POST)
요청 URL가  "abc"이고, 요청방식이 POST인 요청과 매핑된다
@PostMapping(path= "/abc")와 동일하다

@RequestMapping(path= "/abc", params ="deleteYn=Y")
요청 URL가 "/abc"이고, 요청파라미터값의 deleteYn이 "Y"인 요청과 매핑된다

@RequestMapping(path= "/abc", params ="deleteYn")
요청 URL가 "/abc"이고, 요청파라미터값의 deleteYn이 있는 요청과 매핑된다
즉, /abc?deleteYn=Y 혹은 /abc/deleteYn=N과 매핑된다

@RequestMapping(path= "/abc", params !="deleteYn=Y")
요청 URL가 "/abc"이고, 요청파라미터값의 deleteYn이 없는 요청과 매핑된다

 

 

@GetMapping

 

HTTP 요청과 요청핸들러 메소드를 매핑하는 어노테이션. HTTP 요청 중에서 GET 방식의 요청과 요청핸들러 메소드를 매핑시킨다

 

주요속성

path : 요청 URI를 지정한다
value : 요청 URI를 지정한다
params : 요청파라미터값으로 매핑을 지정한다

 

@GetMapping(path= "/abc", params ="deleteYn=Y")
요청 URL가 "/abc"이고, 요청파라미터값의 deleteYn이 "Y"인 요청과 매핑된다

@GetMapping(path= "/abc", params ="deleteYn")
요청 URL가 "/abc"이고, 요청파라미터값의 deleteYn이 있는 요청과 매핑된다
즉, /abc?deleteYn=Y 혹은 /abc/deleteYn=N과 매핑된다

@GetMapping(path= "/abc", params !="deleteYn=Y")
요청 URL가 "/abc"이고, 요청파라미터값의 deleteYn이 없는 요청과 매핑된다

 

 

@PostMapping

 

HTTP 요청과 요청핸들러 메소드를 매핑하는 어노테이션. 주로 데이터를 생성하거나 업데이트 할 때 사용된다

 

주요속성

value 또는 path : 매핑할 URL 경로를 지정한다. 둘은 동일한 역할을 하며, 배열 형태로 여러 경로를 지정할 수 있다

consumes : 메소드가 처리할 수 있는 요청의 미디어 타입을 지정한다

produces : 메소드가 생성하는 응답의 미디어 타입을 지정한다

 

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestBody;

@RestController
public class MyController {

    @PostMapping("/mypath")
    public MyResponse myMethod(@RequestBody MyRequest request) {
        // 요청 처리 로직
        return new MyResponse();
    }
}

 

 

@RequestBody

 

이 어노티에션은 요청 본문을 자바객체로 변환해 메소드 파라미터로 전달할 수 있게 한다

(Spring의 HttpMessageConverter를 통해 요청 본문의 내용이 적절한 자바 객체로 변환된다)

 

@PostMapping("/users")
public User createUser(@RequestBody User newUser) {
    // 사용자 등록 로직
    return userService.createUser(newUser);
}

 

여기서 RequestBody는 클라이언트가 보낸 JSON 형태의 사용자 정보를 User 객체로 변환해서 처리하는 역할을 수행한다

'Spring' 카테고리의 다른 글

REST API  (0) 2024.03.28
Spring_Spring MVC, 첨부파일 업로드  (0) 2024.03.15
Spring_스프링 시큐리티  (0) 2024.03.12
Spring_form 입력 값 유효성 체크, <form:form>태그  (3) 2024.03.06
Spring_AOP  (0) 2024.02.27