간단하게 설명 하고 마치도록 하겠습니다.
@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 안의 칼럼만 추가를 해준다면, 더 이상 수정사항이 없습니다.
감사합니다.
'Spring' 카테고리의 다른 글
spring 에서 @Async 어노테이션 사용하기(비동기) (1) | 2023.04.20 |
---|---|
List -> Page 변환 (0) | 2023.03.20 |
Could not write JSON: Infinite recursion (stackOverflowError) (0) | 2023.03.16 |
SpringBoot 란?(스프링부트) (0) | 2022.04.08 |
Spring(스프링) 이란? 뭘까? (0) | 2022.03.27 |