Spring 요청 데이터 2

사나이장대산·2024년 11월 2일

Spring

목록 보기
10/26

HTTP Message Body(요청)

@RequestParam, @ModelAttribute는 GET + Query Parameter와, POST HTML Form Data를 바인딩하는 방법이다.

  • 이 내용은 HTTP Message Body에 직접적으로 Data가 전달되는 경우이다.

    • Request Body의 Data를 바인딩하는 방법이다.
  • REST API에서 주로 사용하는 방식이다.

  • HTTP Method POST, PUT, PATCH에서 주로 사용한다.

    • GET은 Request Body가 존재할 수는 있지만 권장하지 않는다.
  • JSON, XML, TEXT 등을 데이터 형식으로 사용한다.

  • HTTP Message 구조

    -HTTP Request, Response 예시

  • Server에서 Request로 전달받은 Data를 처리하기 위해서 바인딩 해야 한다.

ex) JSON → Object

TEXT

HTTP Request Body에 Data가 전송되는 경우 HttpMessageConverter(중요)를 통해 바인딩된다.

현대에는 Restful API를 주로 사용하고 있어서 대부분의 경우 JSON 형식으로 통신한다.

1. HttpServletRequest 예시

- `request.getInputStream();`
java
@Slf4j
@Controller
public class RequestBodyStringController {
	
	@PostMapping("/v1/request-body-text")
  public void requestBodyTextV1(
          HttpServletRequest request,
          HttpServletResponse response
  ) throws IOException {

      ServletInputStream inputStream = request.getInputStream();
      String bodyText = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
      
      response.getWriter().write("response = " + bodyText);

  }

}
  • Postman
    • Request → Body → raw → Text
  • Request Header Content-Type : text/plain 인지 확인할것

2. I/O 예시

  • InputStream(읽기) 파라미터 지원
    • HTTP Request Body Data 직접 조회
  • OutputStream(쓰기) 파라미터 지원
    • HTTP Response Body 직접 결과 출력
@PostMapping("/v2/request-body-text")
public void requestBodyTextV2(
				InputStream inputStream,
				Writer responseWriter
) throws IOException { 
		
	String body = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
	
	responseWriter.write("response = " + bodyText);
}
  • Postman

3. HttpEntity 예시

  • HttpMessageConverter
  • HttpEntity를 사용하면 HttpMessageConverter를 사용한다.
@PostMapping("/v3/request-body-text")
public HttpEntity<String> requestBodyTextV3(HttpEntity<String> httpEntity) { 
		
	// HttpMessageConverter가 동작해서 아래 코드가 동작하게됨
	String body = httpEntity.getBody();
		
	return new HttpEntity<>("response = " + body); // 매개변수 = Body Message
	
}
  • Postman
  • Spring의 HttpMessageConverter 덕분에 간편하게 Request Data에 접근할 수 있다.
    • HttpEntity를 사용하면 HttpMessageConverter가 동작하여 자동으로 매핑된다.
    • 요청 뿐만이 아닌 응답까지 HttpEntity 하나만으로 사용이 가능해진다.

Converter는 어떤 뭔가를 다른 뭔가로 바꿔주는(Convert) 장치를 말한다. 예를 들면 태양빛을 전기로 바꿔주는 장치 또한 컨버터이다.

profile
사나이 張大山 포기란 없다.

0개의 댓글