티스토리 뷰

 

아래는 스프링에서 컨트롤러 메서드의 파라미터를 바인딩하기 위한 애노테이션이다.

 

 

@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를 사용하면 컨트롤러 메서드에서 요청 파라미터를 자바 객체로 편리하게 바인딩하고, 모델에 데이터를 추가할 수 있습니다. 이를 통해 컨트롤러의 코드를 간결하게 유지하고 관련된 데이터를 효과적으로 다룰 수 있습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday