[Spring] Client->Server 데이터 전달 Request문 결정하기

말하는 감자·2025년 3월 20일

내일배움캠프

목록 보기
23/73

그 뭐냐 POST METHOD사용시
BODY는 기본적으로 사용하고
상황에 따라

  • BODY의 형태는 어떤식으로 해야할지
  • 받아오는 함수는 어떤 Annotation이 좋은지
    결정할 수 있어야 하는 것이 오늘의 목표

지난시간에 했던거 짧은 요약

Client -> Server 데이터 전달 방법

1️⃣ @RequestParam - Get + Query Parameter(Query String)

  • Body없이 url뒤에 Paramas를 넣음
    • http://localhost:8080/tutor?name=wonuk&age=100
  • @RequestParam, @ModelAttribute어노테이션 사용

2️⃣ @RequestParam - POST + HTML Form ( x-www-form-urlencoded )

  • @RequestParam,@ModelAttribute 어노테이션 사용

3️⃣ HTTP Request Body

  • HttpMessageConverter 인터페이스 활용
    • @RequestBody어노테이션 사용
    • 헤더 Content-Type에 데이터 형태가 주어지면 그혈태에 맞게 읽어ㅇㅗㅁ






@ModelAttribute vs @RequestBody, @ResponseBody

공통점 : 사용자 지정 클래스로 Request의 Body 내용을 매핑한다.

@ModelAttribute

함수


@RestController
public class JsonController {

    @PostMapping("/v4/request-body")
    public String requestBodyJsonV4(Tutor tutor) {

        Tutor requestBodyTutor = tutor;

        return "tutor.getName() = " + requestBodyTutor.getName() + " tutor.getAge() = " + requestBodyTutor.getAge();
    }

입력값

http://localhost:8080/v4/request-body+ x-www-form-urlencoded

📌 x-www-form-urlencoded
HTML에서 <form> 태그 처럼 작성된다.
한번에 같은 키값 여러개 XXXX

출력값

tutor.getName() = sparta tutor.gatAge() = 100






@RequestBody, @ResponseBody

함수

@RestController
public class JsonController {

    @PostMapping("/v4/request-body-json")
    public String requestBodyJsonV4(@RequestBody Tutor tutor) {

        Tutor requestBodyTutor = tutor;

        return "tutor.getName() = " + requestBodyTutor.getName() + " tutor.getAge() = " + requestBodyTutor.getAge();
    }

‼️파라 미터 앞에 @RequestBody 기재 필수

저거 안써주면 자동으로 @ModelAttribute취급함.

입력값

http://localhost:8080/v4/request-body-json+ Json

출력값

tutor.getName() = sparta tutor.gatAge() = 100



들어온 그대로 반환하기

만약에 반환 형식을 사용자 지정 클래스 그대로 하고 반환하면
출력으로 나가는 값도 그대로 json이댐
이런 경우 View를 조회하지 않고 Response Body에 Data를 입력해서 직접 반환한다.

특징

  • JSON은 MappingJackson2HttpMessageConverter 를 사용한다.
  • Request Header의 Content-Type은 application/json 이어야 한다.
    • Header로 어떤 Converter가 동작할지 판별한다.






어떤 것을 선택?

📌@ModelAttribute vs @RequestBody 의 이용 차이점

  • Header 내용
    • 보통 @ModelAttribute은 Form형태를 많이 취하는데, postman에서 확인하면 Body내용이 form 형태일 경우 Header에 Content-Type 변수가 없어짐

< @ModelAttribute - Body = x-www-form-urlencoded >

< @RequestBody - Body = Json >

HTTPMessageConverter 작동 조건

1️⃣ 헤더안의 Content-Type 이 HTTPMessageConverter 가 제공하는 데이터 타입이어야 함
2️⃣ 함수안에서 받아오는 매개변수에 @RequestBody 표시가 되어있어야함
➡️ HTTPMessageConverter이건 내가 바꿔야 겠구나 인식함

그 외에는 @ModelAttribute 로 취급하는 듯

다음 게시글 : [Spring] Client<-Server 데이터 전달 Response문 결정하기

profile
대충 데굴데굴 굴러가는 개발?자

0개의 댓글