Spring 9. HTTP 데이터를 객체로 처리하기

김창민·2024년 8월 12일

BE

목록 보기
29/50

@ModelAttribute

form 태그 POST

HTML의 form 태그를 통해서 Post 방식으로 HTTP 요청을 보낼 수 있다. 이때 데이터는 Request Param 방식과 같이 name=Robbie&age=95 형태로 담겨져서 서버로 전달된다.
해당 데이터를 JAVA의 객체로 받는 방법은 다음과 같다.

@PostMapping("/form/model")
@ResponseBody
public String helloRequestBodyForm(@ModelAttribute Star star) {
    return String.format("Hello, @ModelAttribute.<br> (name = %s, age = %d) ", star.name, star.age);
}

@ModelAttribute를 사용해서 Body 데이터를 Star 객체로 받아오면 된다.

Query String 방식

Request Param 방식처럼 받아오는 것도 좋지만, 데이터의 양이 많아지면 힘들어진다. 이때 @ModelAttribute를 이용해서 Java의 객체로 받아오면 편하다.

@GetMapping("/form/param/model")
@ResponseBody
public String helloRequestParam(@ModelAttribute Star star) {
    return String.format("Hello, @ModelAttribute.<br> (name = %s, age = %d) ", star.name, star.age);
}

이때 @ModelAttribute은 생략이 가능하다. @RequestParam도 생략이 가능하다고 했는데, Spring은 매개변수 타입이 SimpleValueType(원시, Wrapper, Date...)등은 RequestParam로 취급하고 아니면 ModelAttribute로 취급하기 때문


@RequestBody

HTTP Body에 JSON 데이터를 담아 서버에 전달할 때 해당 Body 데이터를 Java의 객체로 전달 받을 수 있다.

Body JSON 데이터

HTTP Body에 {"name":"Robbie","age":"95"} JSON 형태로 데이터가 서버에 전달되었을 때 @RequestBody 애너테이션을 사용해 데이터를 객체 형태로 받을 수 있다.

@PostMapping("/form/json")
@ResponseBody
public String helloPostRequestJson(@RequestBody Star star) {
    return String.format("Hello, @RequestBody.<br> (name = %s, age = %d) ", star.name, star.age);
}

다만, 객체에 데이터를 넣어주려면 setter, getter, 또는 생성자가 필요하다.

profile
일일 회고 : https://rlackdals981010.github.io/

0개의 댓글