상황
- AOP 이용하여 request 마다 log를 찍음
- POST 요청 시에 RequestBody로 들어오는 param 로그를 찍기위해, request에 접근해서 param을 받아옴
- 이때 request filter이용해서 한번 감싸준 request에서 param을 꺼내옴
- 잘 작동하던 코드인데, 갑자기 이번 프로젝트에서 IllegalStateException 뜨면서 컨트롤러로 아예 넘어오지 못하고 있다,,
- postman으로 테스트하면 괜찮음
- junit으로 테스트시에 예외 발생
과정
1. request 비교
JUnit test
- 210705 09:59:29 INFO c.b.a.c.u.CustomJsonUtils - Error reading JSON string: java.lang.IllegalStateException: Cannot call getReader() after getInputStream() has already been called for the current request
Postman
- ReadableRequestWrapper로 잘 감싸져있음!!
2. Filter Chain 비교
- RequestFilter에서 wrapper로 감싸주는 코드가 있는데, filterRegisterBean에 등록해놨음에도 불구하고 Junit에서 테스트할 때, 그 필터가 적용되지 않는다.
JUnit
Postman
해결
MockMvc set up시 filter emdfhr
@Before
public void setUp() throws ServletException {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.addFilter(new RequestFilter())
.apply(springSecurity())
.build();
}
참고