BE/Spring

[Spring]Spring MVC - @ModelAttribute 장점 및 @RequestParam

2sangmin 2023. 6. 20.

@RequestParam

Spring 에서

@PostMapping을 할 때, 

@PostMapping("/member/save")
    public String save(@RequestParam("memberEmail") String memberEmail,
                       @RequestParam("memberPassword") String memberPassword,
                       @RequestParam("memberName") String memberName) {
        System.out.println("MemberController.save");
        System.out.println("memberEmail = " + memberEmail + ", memberPassword = " + memberPassword + ", memberName = " + memberName);
        return "index";
    }

컨트롤러에서 @RequestParam을 통해서 직접 memberEmail, memberPassword, memberName을 매개변수로 받아서 실행을 해보면

와 같이 @RequestParam을 통해 만든 매개변수가 1:1 매핑이 된것을 볼 수 있다.

1:1 매핑을 사용하면 단순하게 값을 불러올 수 있지만, 사용자를 찾기 위한 검색 조건이 늘어나거나 줄어드는 변경이 발생되었을때는 문제점이 발생할 수 있다. 그래서 이를 해결하기 위한 방법인 @ModelAttribute가 있다.

@ModelAttribute

ModelAttribute를 사용하기위해 @requestParam에서 매개변수로 사용했었던 것들을 우선 dto 클래스에 필드로 선언해야한다.

 

MemberDTO 클래스

package com.example.member.dto;

import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class MemberDTO {
    private Long id;
    private String memberEmail;
    private String memberPassword;
    private String memberName;
}

 

 

 

이제 컨트롤러 부분에서 @ModelAttribute를 테스트 해보면

@PostMapping("/member/save")
    public String save(@ModelAttribute MemberDTO memberDTO) {
        System.out.println("MemberController.save");
        System.out.println("memberDTO = " + memberDTO);
        return "index";
    }

클래스에서는 id변수를 만들었지만, 나는 아직 이메일, 비밀번호, 이름밖에 만들지 않았기 때문에 자동으로 Null값으로 들어가는 것을 볼 수 있고, 나머지는 아까 @Requestparam을 사용했던것처럼 값이 잘 들어가있는 모습을 볼 수 있다.

댓글