[spring] HttpServletRequest (2)

공수정·2022년 5월 3일
0

spring

목록 보기
19/32
post-custom-banner

HTTP 메시지로 요청

GET - 쿼리 파라미터

특징

  • 메시지 바디 없이 URL의 쿼리 파라미터에 데이터를 포함해서 전달
  • ex) /url?username=hello&age=20 검색, 필터, 페이징 등에서 많이 사용

쿼리 파라미터는 URL에 다음과 같이 ? 를 시작으로 보낼 수 있다. 추가 파라미터는 & 로 구분

조회

  1. 전체 파라미터
request.getParameterNames().asIterator()
	.forEachRemaining(paramName -> System.out.println(paramName + "=" + request.getParameter(paramName)));
  1. 단일 파라미터
request.getParameter("username");
  1. 같은 이름의 복수 파라미터
String[] usernames = request.getParameterValues("username");
for (String name : usernames) {
	System.out.println(name + "=" + request.getParameter(name));
}

POST - HTML Form

특징

  • 메시지 바디에 쿼리 파라미터 형식으로 전달
  • ex) username=hello&age=20 회원가입, 상품 주문, HTML Form 사용
  • content-type: application/x-www-form-urlencoded

post로 보내면 body부분에, get으로 보내면 head부분에 포함되어짐 -> HTTP METHOD의 GET과 POST 차이
쿼리 파라미터와 똑같이 쿼리스트링으로 들어오기 때문에 꺼내서 사용하는 방법도 똑같음
POST로 보낸다면 content-type을 application/x-www-form-urlencoded으로 해주어야함

HTTP message body

특징

  • HTTP message body에 데이터를 직접 담아서 요청
  • HTTP API에서 주로 사용, JSON, XML, TEXT // 주로 JSON사용

조회

  1. 단순 텍스트 : content-type:text/plain
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);//charset지정

inputStream은 byte 코드를 반환하기에 문자를 보려면 charset을 지정해줘야한다.

2.JSON : content-type:application/json

ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);//charset지정

//json 데이터로 파싱하기 위해 사전에 helloData를 만들어야한다.
HelloData helloData = objectMapper.readValue(messageBody,HelloData.class);

처리하는 방법은 단순 텍스트와 같고, 단순 텍스트 이후에 json 데이터로 파싱하는 작업을 해야한다

profile
계속해서 공부하는 개발자입니다 :)
post-custom-banner

0개의 댓글