POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
username=kim&age=20
위는 간단한 예시이며, 실제로는 훨씬 더 많은 다양한 정보가 포함된다.
request.getMethod() = GET
request.getProtocal() = HTTP/1.1
request.getScheme() = http
request.getRequestURL() = http://localhost:8080/request-header
request.getRequestURI() = /request-header
request.getQueryString() = null
request.isSecure() = false
HttpServletRequest.getParameter는 동일한 이름의 파라미터가 여러개일 경우, 첫번째 파라미터의 값을 반환해준다.
중복된 파라미터명이 존재할 수 있을 경우, getParameterValues() 와 asIterator(), forEachRemaining()을 활용하도록 하자
html 예시 코드
<form action="/save" method="post"> <input type="text" name="name" /> <input type="text" name="addr" /> <button type="submit">전송</button> </form>
html 메시지
POST /save HTTP/1.1 Host: localhost:8080 Content=Type: application/x-www-form-urlencoded name=hansu&addr=seoul
ServletInputStream inputStream = req.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody = " + messageBody);
@WebServlet(name = "requestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletInputStream inputStream = req.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody = " + messageBody);
HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
System.out.println("helloData.username = " + helloData.getUsername());
System.out.println("helloData.age = " + helloData.getAge());
}
}
ObjectMapper는 Spring MVC에서 제공해주는 Jackson 라이브러리의 기능이다.