안녕하세요 이번 글에서는 Controller에서 파라미터를 받는 몇 가지 방법을 정리하여 보겠습니다.
> Get 방식
전송 : http://localhost:8080/example1? id=momo&code=1
/**
* 변수 하나하나 받을 경우
* @param id
* @param code
* @param model
*/
@GetMapping("/example1")
public void example1(@RequestParam String id,
@RequestParam String code, Model model){
model.addAttribute("id", id);
model.addAttribute("code", code);
}
파라미터를 하나하나 받을 경우 @RequestParam을 선언한 다음 타입과 변수명을 선언하여 준다.
/**
* Map 형식으로 받을 경우
* @param paramMap
* @param model
*/
@GetMapping("/example1")
public void example2(@RequestParam Map<String,Object> paramMap,
Model model){
model.addAttribute("paramMap", paramMap);
}
Map형식으로 받을 경우 위와 같이 @RequestParam을 선언한 뒤 Map을 선언하여 준다.
@Data
public class ExampleParameter {
private String id;
private String code;
}
/**
* 클래스로 받을경우 @RequestParam 을 생략하여 준다.
* @param parameter
* @param model
*/
@GetMapping("/example1")
public void example3(ExampleParameter parameter,
Model model){
model.addAttribute("parameter", parameter);
}
위처럼 파라미터로 받을 클래스 객체를 만들어 파라미터로 받을 수 있다. 이때 클래스의 프로퍼티는 View에서 넘겨주는 Key 값과 동일한 이름으로 생성하여 준다. @RequestParam을 선언하지 않는다.
전송 : http://localhost:8080/example2/2
/**
* PathVariable 을 사용 할 경우
* @param id
* @param model
* @return
*/
@GetMapping("/example2/{id}")
public String example4(@PathVariable String id,
Model model){
model.addAttribute("id", id);
return "/example/parameter/example4";
}
@PathVariable을 사용하여 전송 시 url 뒤에 키 : 벨류 형태로 값을 보내는 것이 아닌 값이 될 변수만 전송한다.
@GetMapping 선언 시 해당 변수가 url에 위치할 곳을 표시하여 준다음 @PathVariable을 사용하여 파라미터로 받아준다.
> POST 방식
/**
* POST 방식으로 JSON 형식을 받을 경우
* @param requestBody
* @return
*/
@PostMapping("/example2")
@ResponseBody
public Map<String, Object> example6(@RequestBody Map<String, Object> resultMap ){
return resultMap;
}
View에서 데이터를 Json 형식으로 전송하여 줄 경우 @RequestBody를 선언하여 준 다음 맵 형식으로 해당 데이터를 받는다.
@Data
public class ExampleUser {
private String name;
private int age;
private String address;
}
@Data
public class ExampleRequestBodyUser {
private ExampleUser user;
}
/**
* JSON 형식을 클래스로 받을 경우
* @param requestBody
* @return
*/
@PostMapping("/example2")
@ResponseBody
public Map<String, Object> example7(@RequestBody ExampleRequestBodyUser requestBody ){
logger.info("requestBody : {}" ,requestBody);
return requestBody;
}
Json 형식의 데이터를 클래스 형태로 받을 시 위처럼 클래스의 프로퍼티를 파라미터와 같이 선언하여 준다음, 해당 클래스를 한 번 더 다른 클래스로(Map 역할) 받아준 뒤 @RequestBody를 사용하여 받아주면 됩니다.
참고 영상 : https://www.inflearn.com/course/backend-%EC%86%A1%EC%9E%90%EB%B0%94/dashboard
'Spring & Spring Boot' 카테고리의 다른 글
[ Spring-Boot ] JPA @GeneratedValue 사용하기 (0) | 2021.05.22 |
---|---|
[ Spring-Boot ] JPA 공통 Entity 만들기 (0) | 2021.05.22 |
[ Spring-Boot ] Mybatis DB 커넥션 설정하기 (0) | 2021.05.19 |
[ Spring-Boot ] @ControllerAdice 사용하여 예외처리 하기 2편 (0) | 2021.05.19 |
[ Spring-Boot ] Swagger 사용하기 (0) | 2021.05.19 |