본문 바로가기

Spring

@ModelAttribute 와 @RequestParam

728x90
반응형
SMALL

간단하게 설명 하고 마치도록 하겠습니다.

 

@RequestParam

@RestController
public class exampleController{
	@GetMapping("/search-user")
    public String test(@RequestParam("username")String username{
    	//생략...
    }
}

@RequestParam 은 사용자가 /search-user?username=아무값   요청을 하게 되면 username변수에 값을 받을 수 있습니다.

사용자가 요청 시 전달하는 값을 Controller의 매개변수로 1:1 Mapping 할 때 사용됩니다.

 

 

 

@ModelAttribute

@Data //Lombok
public class TestVO {
    private String username;
    private String userNickname;
    private int age;
    private String address;
    private String userHp;
}

@RestController
public class exampleController {
	@GetMapping("/search-user")
    public void test(@ModelAttribute TestVO testVO){
    	//생략...
    }
}

@ModelAttribute 는 사용자가 요청시 전달하는 값을 Object 로 Mapping 할 때 사용됩니다.

예를 들어 /search-user?username=유저명&userNickname=유저닉네임&age=27&address=주소&userHp=01000000000   

요청을 하게 되면 Object 안에 각 변수들이 매핑이 됩니다.

 

 

@ModelAttribute 장점

@Data //Lombok
public class TestVO {
    private String username;
    private String userNickname;
    private int age;
    private String address;
    private String userHp;
}

@RestController
public class exampleController {
	@GetMapping("/search-user")
    public void test(@RequestParam("username")String username,
                     @RequestParam("userNickname")String userNickname,
                     @RequestParam("age")int age,
                     @RequestParam("address")String address,
                     @RequestParam("userHp")String userHp)
    {
    	//생략...
    }
}

첫번째로는 @RequestParam 으로 이용해서 1:1로 매핑 할 시, 매핑할 요소들이 많으면, 코드가 길어집니다.

소스코드 위에서 만든, TestVO 를 활용한다면, @ModelAttribute TestVO testVO 로 코드를 간결하게 표현할 수 있습니다.

 

 

@Data //Lombok
public class TestVO {
    private String username;
    private String userNickname;
    private int age;
    private String address;
    private String userHp;
}

@RestController
public class exampleController {
	@GetMapping("/search-user")
    public void test(@RequestParam("username")String username,
                     @RequestParam("userNickname")String userNickname,
                     @RequestParam("age")int age,
                     @RequestParam("address")String address,
                     @RequestParam("userHp")String userHp)
    {
    	List<User> users = userService.findUserInfo(username,userNickname,age,address,userHp);
        //생략...
    }
}

두번째로는 변경할 사항이 줄어든다는 점입니다.  

위에 코드를 보시면, 현재 @RequestParam 으로 [username,userNickname,age,address,userHp] 파라미터를 5가지를 받고있습니다.

여기서 userEnglishName 이라는 파라미터를 추가 를 하려면

1. @RequestParam("userEnglishName")String userEnglishName

2. findUserInfo 파라미터 추가

3. userService 클래스의 findUserInfo 안에의 파라미터

 

이렇게 세가지를 수정해야 합니다.

하지만 @ModelAttribute 를 이용한다면, 저희가 사전에 만들어 놓은 TestVO 안의 칼럼만 추가를 해준다면, 더 이상 수정사항이 없습니다.

 

 

감사합니다.

 

728x90
반응형
LIST