스프링/스프링 MVC 패턴
서블릿 HTTP 요청 데이터
chanhee01
2023. 2. 10. 13:12
HTTP에 원하는 값을 요청해서 웹 사이트에 데이터를 보내는 방법이 있다.
1. GET 쿼리 파라미터
@WebServlet(name = "requestParamServlet", urlPatterns = "/request-param")
public class RequestParamServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("[전체 파라미터 조회] - start");
request.getParameterNames().asIterator()
.forEachRemaining(paramName -> System.out.println(paramName + "=" + request.getParameter(paramName)));
// paramName은 username과 age이고, request.getParameter(paramName)은 hello와 20
System.out.println("[전체 파라미터 조회] - end");
System.out.println();
System.out.println("[단일 파라미터 조회]");
String username = request.getParameter("username");
String age = request.getParameter("age");
System.out.println("username = " + username);
System.out.println("age = " + age);
System.out.println("[이름이 같은 복수 파라미터 조회]");
String[] usernames = request.getParameterValues("username"); // 중복조회는 Values를 붙이면 된다.
for (String name : usernames) {
System.out.println("username = " + name);
}
}
}
쿼리 파라미터에 직접 원하는 값을 설정해서 요청하는 것이다.
개발자가 따로 값을 지정하지않고, 정해진 url, http:localhost:8080/request-param?username=hello&age=20 이라고 입력하면 username이라는 key값에 hello라는 value가 저장되고, age라는 key값에 20이라는 value가 저장된다.
2. 단순 텍스트를 이요한 API 메시지 바디
@WebServlet(name = "requestBodyStringServlet", urlPatterns = "/request-body-string")
public class RequestBodyStringServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletInputStream inputStream = request.getInputStream(); // 데이터를 읽어서 postman에서 보내는걸 여기 출력창에 출력
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody = " + messageBody);
response.getWriter().write("ok");
}
}
ServletInputStream을 통해 용청하는 데이터를 읽어서 inputStream에 저장한다.
StreamUtils.copyToString으로 inputStream을 StandardCharsets.UTF_8로 고정시킨다.
이렇게 하면 messageBody 요청을 보냈을 때 값을 서버에 계속 저장하게 된다.
3. json 방식의 API 메시지 바디 요청
@WebServlet(name = "requestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletInputStream inputStream = request.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());
response.getWriter().write("ok");
}
}
위의 코드는 json 방식으로 API 메시지를 오청하는 것이다. json 방식이라 함은 {"username": "hello", "age": 20}이라는 표기명으로 적는 것이 json 방식이다.
위의 코드에서 intellij 결과창에는 messageBody가 {"username": "hello", "age": 20}로 뜨고, username은 hello, age는 20으로 결과값이 나온다.