티스토리 뷰
아래는 스프링에서 컨트롤러 메서드의 파라미터를 바인딩하기 위한 애노테이션이다.
@RequestParam
HTTP 요청의 쿼리 파라미터를 메서드 파라미터에 바인딩하여 받는 방법이다.
주로 URL에 포함된 쿼리 스트링(parameter) 값을 메서드의 파라미터로 전달받을 때 사용된다.
기본적으로 필수적인 파라미터로 간주되며, 필수가 아닌 경우 required 속성을 false로 설정할 수 있습니다.
@GetMapping("/example")
public String exampleMethod(@RequestParam String paramName) {
// 메서드 내용
}
@RequestParam을 사용하면 HTTP 요청의 쿼리 파라미터를 메서드의 파라미터로 편리하게 바인딩할 수 있다. 이것을 사용하면 명시적으로 쿼리 파라미터를 지정하고, 필요에 따라 값을 기본값으로 설정하거나 필수 여부를 지정할 수 있다.
여러개의 값을 받을 경우
@GetMapping("/example")
public String exampleMethod(@RequestParam List<String> paramNames) {
// 메서드 내용
}
하나의 쿼리 파라미터 이름으로 여러 값을 받고 싶다면 List나 배열과 같은 자료구조로 파라미터를 선언할 수 있다.
@RequestParam의 필수 값 속성
@GetMapping("/example")
public String exampleMethod(@RequestParam(name = "paramName", required = true, defaultValue = "default") String paramName) {
// 메서드 내용
}
- name: 쿼리 파라미터의 이름을 명시적으로 지정할 수 있다. 기본적으로 메서드 파라미터의 이름과 동일한 이름을 사용한다.
- required: 필수 파라미터 여부를 결정합니다. 기본값은 true이며, 만약 요청에 필수 파라미터가 없을 경우 예외가 발생한다.
- defaultValue: 쿼리 파라미터가 없는 경우 사용할 기본값을 설정한다.
이것을 사용하지 않을 경우
@GetMapping("/example")
public String exampleMethod(HttpServletRequest request) {
String paramName = request.getParameter("paramName");
// 메서드 내용
}
@PathVariable
스프링에서 URL 패턴에 변수 값을 추출하여 메서드의 파라미터를 전달받을 떄 사용되는 애노테이션이다.
URI 템플릿 변수 값을 메서드 파라미터에 바인딩합니다.
주로 RSETful 웹 서비스에서 경로 변수를 활용해 동적인 URL을 처리할 때 사용된다.
@Controller
public class ExampleController {
@GetMapping("/example/{id}")
public String exampleMethod(@PathVariable Long id) {
// 메서드 내용
return "examplePage";
}
}
기본적으로 {}로 감싼 변수를 URI 패턴에 사용하고, 메서드 파라미터에 @PathVariable을 사용하여 매핑한다.
예를 들어 {id}는 경로 변수이며, /example/123과 같은 요청이 들어오면 id 파라미터에는 123이 할당된다.
변수 이름 매핑
@Controller
public class ExampleController {
@GetMapping("/example/{pathVariable}")
public String exampleMethod(@PathVariable("pathVariable") String customName) {
// 메서드 내용
return "examplePage";
}
}
변수 이름을 경로 변수 이름과 다르게 매핑할 수 있다. 위의 예제에서 customName은 {pathVariable}의 값과 매핑된다.
여러 경로 변수 사용
@Controller
public class ExampleController {
@GetMapping("/example/{category}/{id}")
public String exampleMethod(@PathVariable String category, @PathVariable Long id) {
// 메서드 내용
return "examplePage";
}
}
여러 개의 경로 변수를 사용하여 /example/books/123의 경우 category에는 "books", id에는 123이 할당된다..
기본값 및 필수 여부 설정
@Controller
public class ExampleController {
@GetMapping("/example/{id}")
public String exampleMethod(@PathVariable(name = "id", defaultValue = "1") Long id) {
// 메서드 내용
return "examplePage";
}
}
- defaultValue: 경로 변수에 값이 없는 경우 사용할 기본값을 설정할 수 있다.
- required: 필수 여부를 결정하며, 기본값은 true이다. false로 설정하면 값이 없어도 예외가 발생하지 않는다.
경로변수를 표시하기 위해 메서드에 매개변수에 사용된다.
경로 변수는 중괄호 {id} 로 둘러 싸인 값을 나타낸다.
URL 경로제엇 변수 값을 추출하여 매개변수에 힐딩한다.
작성 시 기본적으로 경로변수는 가져야하고 값이 없는 404 오류가 발생한다.
주로 상세 조회, 수정, 삭제 와 같은 작업에서 리소스 식별자로 사용된다.
@PathVariable을 사용하면 URL의 일부를 메서드 파라미터로 추출하는 유용한 기능을 제공하여 RESTful 웹 애플리케이션에서 경로에 포함된 변수를 쉽게 다룰 수 있게 해준다.
@RequestBody
Spring에서 HTTP 요청의 본문(body)을 자바 객체로 매핑하는 데 사용되는 어노테이션입니다. 주로 POST 또는 PUT 요청에서 클라이언트가 전송한 데이터를 서버에서 객체로 변환하는 데에 활용됩니다. JSON 또는 XML 형식의 데이터를 자바 객체로 변환하는 데 자주 사용됩니다.
@RestController
@RequestMapping("/api")
public class ExampleController {
@PostMapping("/example")
public String exampleMethod(@RequestBody ExampleObject exampleObject) {
// 메서드 내용
return "Received: " + exampleObject.toString();
}
}
위의 예제에서 @RequestBody 어노테이션이 붙은 exampleObject 파라미터는 HTTP 요청의 본문에 있는 데이터를 자동으로 ExampleObject 객체로 변환합니다.
JSON 데이터 처리
public class ExampleObject {
private String name;
private int age;
// getters and setters
@Override
public String toString() {
return "ExampleObject{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
위에서 사용된 ExampleObject 클래스는 JSON 데이터의 구조를 나타냅니다.
// POST 요청 본문 예시
{
"name": "John",
"age": 25
}
위와 같은 JSON 형식의 데이터가 POST 요청의 본문에 포함되면 Spring은 자동으로 이를 ExampleObject로 매핑합니다.
XML 데이터 처리
@RestController
@RequestMapping("/api")
public class ExampleController {
@PostMapping("/example-xml", consumes = MediaType.APPLICATION_XML_VALUE)
public String exampleMethodXml(@RequestBody ExampleObjectXml exampleObjectXml) {
// 메서드 내용
return "Received: " + exampleObjectXml.toString();
}
}
XML 형식의 데이터를 처리하려면 consumes 속성을 이용하여 MediaType.APPLICATION_XML_VALUE를 명시해야 합니다.
@XmlRootElement
public class ExampleObjectXml {
private String name;
private int age;
// getters and setters
@Override
public String toString() {
return "ExampleObjectXml{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
XML 데이터의 구조를 나타내기 위해 ExampleObjectXml 클래스에 @XmlRootElement 어노테이션을 사용합니다.
<!-- POST 요청 본문 예시 -->
<ExampleObjectXml>
<name>John</name>
<age>25</age>
</ExampleObjectXml>
이와 같은 XML 형식의 데이터가 POST 요청의 본문에 포함되면 Spring은 자동으로 이를 ExampleObjectXml로 매핑합니다.
@RequestBody를 사용하면 클라이언트가 전송한 데이터를 자바 객체로 쉽게 변환할 수 있으며, 이는 주로 RESTful 웹 서비스에서 클라이언트와 서버 간의 데이터 교환에 활용됩니다.
@ModelAttribute
Spring에서 컨트롤러 메서드의 파라미터에 사용되는 어노테이션으로, 요청 파라미터를 자바 객체에 바인딩하고 해당 객체를 모델에 추가합니다. 이를 통해 폼 데이터를 받아 처리하거나 모델에 데이터를 추가할 때 사용됩니다.
@Controller
public class ExampleController {
@GetMapping("/example-form")
public String exampleForm() {
return "exampleFormPage";
}
@PostMapping("/submit-form")
public String submitForm(@ModelAttribute ExampleObject exampleObject) {
// @ModelAttribute를 사용하여 요청 파라미터를 ExampleObject로 바인딩하고 모델에 추가
// 메서드 내용
return "submittedFormPage";
}
}
위의 예제에서 /example-form 엔드포인트로 GET 요청이 들어오면 exampleFormPage를 반환하고, /submit-form 엔드포인트로 POST 요청이 들어오면 @ModelAttribute를 사용하여 요청 파라미터를 ExampleObject로 바인딩하고, 해당 객체를 모델에 추가한 후 submittedFormPage를 반환합니다.
HTML 폼과 연동:
<!-- exampleFormPage.html -->
<form action="/submit-form" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name">
<label for="age">Age:</label>
<input type="text" id="age" name="age">
<button type="submit">Submit</button>
</form>
위의 HTML 폼은 /submit-form 엔드포인트로 데이터를 POST하는 간단한 예시입니다. 이 폼에서 전송된 데이터는 @ModelAttribute를 사용하여 처리될 것입니다.
ExampleObject 클래스:
public class ExampleObject {
private String name;
private int age;
// getters and setters
@Override
public String toString() {
return "ExampleObject{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
이 클래스는 HTML 폼에서 전송된 데이터를 담을 구조를 정의합니다.
모델에 데이터 추가:
@Controller
public class ExampleController {
@ModelAttribute("defaultName")
public String defaultName() {
return "John Doe";
}
@GetMapping("/example-model")
public String exampleModel(@ModelAttribute("defaultName") String defaultName) {
// 모델에 "defaultName" 속성 추가
// 메서드 내용
return "exampleModelPage";
}
}
위의 예제에서 @ModelAttribute를 메서드 레벨에서 사용하여 모델에 속성을 추가합니다. 이는 해당 컨트롤러에 속한 모든 메서드에서 사용할 수 있는 전역적인 속성을 추가하는데 활용됩니다.
JSP 페이지에서 모델 데이터 사용:
<!-- exampleModelPage.jsp -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Example Model Page</title>
</head>
<body>
<p>Hello, ${defaultName}!</p>
</body>
</html>
JSP 페이지에서 ${defaultName}을 통해 모델에 추가된 데이터를 사용할 수 있습니다.
@ModelAttribute를 사용하면 컨트롤러 메서드에서 요청 파라미터를 자바 객체로 편리하게 바인딩하고, 모델에 데이터를 추가할 수 있습니다. 이를 통해 컨트롤러의 코드를 간결하게 유지하고 관련된 데이터를 효과적으로 다룰 수 있습니다.
'코딩 > spring' 카테고리의 다른 글
[20주 1일차] 프로젝트 - 경기관리 (1) | 2024.02.19 |
---|---|
[19주 5일차] 프로젝트 - 병원관리(CRUD) (0) | 2024.02.16 |
[18주 1일차] 데이터베이스 연동 : 도서 목록 CRUD 처리하기 (1) | 2024.02.05 |
[17주 4일차] 스프링 웹 플로우 (2) (0) | 2024.02.01 |
[17주 4일차] 스프링 웹 플로우 : 주문 처리 페이지 만들기 (2) (0) | 2024.02.01 |
- Total
- Today
- Yesterday