TIL

[TIL] HttpServletRequest 에서 request 값을 GET, POST에서 사용하기

봄봄로그 2023. 6. 19. 18:47

filter에서 request값을 빼와 log에도 찍고 MDC에도 넣고.. 다양하게 활용하고 싶었다.

 

만약 필요한 값이 header에 있는 값이라면? 

HttpServletRequest.getHeader("header name") 을 사용하여 해결할 수 있다.

 

그런데 header에 없는 값이라면?

HttpServletRequest.getParameter("key name") 을 사용했더니 request로 들어오는 값을 가져올 수 있었다.

 

이렇게 해서 순조롭게 쓰다가 계속 여러 엔드포인트들에서 null이 찍혀 찾아보았더니 이것은 GET방식에서만 가능하고 POST방식에선..... null로 들어오는 것을 알게 되었다 바보다..🤦‍♀️

POST는 json 형태기 때문에 json은 inputStream으로 read해서 가져온다. 이렇게 inputStream으로 가져오면 원하는 request값을 첫 시점에서 사용할 수 있다. 

 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        ContentCachingRequestWrapper cachingRequestWrapper = new ContentCachingRequestWrapper((HttpServletRequest) request);
        ContentCachingResponseWrapper cachingResponseWrapper = new ContentCachingResponseWrapper((HttpServletResponse) response);
		
        InputStream contentInputStream = cachingRequestWrapper.getInputStream();
        String requestBody = StreamUtils.copyToString(contentInputStream, StandardCharsets.UTF_8);
        Map<String,String> map = new ObjectMapper().readValue(requestBody, Map.class);
        
        //request에서 특정 값 사용하기
        String value = map.get("name");
}

이렇게 하면 value를 사용하여 필요한 곳에 쓸 수 있다.