Spring & Spring Boot

[ Spring-Boot ] @Controller 에서 파라미터 받기

사과씨앗 2021. 5. 22. 16:23
728x90
반응형

안녕하세요 이번 글에서는 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

728x90
반응형