Web/스프링

Get RequestBody and ResponseBody at HandlerInterceptor 컨트롤러 추가 호출

벨포트조던 2020. 7. 28.
반응형

목표 

스프링 REST API 호출시.. 해당 api를 파라미터값만 바꿔서 내부적으로 한번 더 실행시키게 하고 싶었다.

다른 해결방식도 있겠지만.. 이렇게는 안해봐서 .. 찾아봄

목표를 인터셉터 또는 필터로 해당 api 메소드 한번 더 실행하는걸로 잡았음

 

결과

테스트하고 자료 많이 찾아봤는데.. 

개인적인 생각으로 이런 방식은 안쓰는게 좋은 것 같음 ..  

 

일단 비슷한 방식으로 재호출은 구현 가능했음 

아래와 같이 인터셉터에서 api 한번 더 실행은 일단 가능한데 .. 인터셉터 전에 응답값은 가져올수 없는것 같다

응답값도 가져왔다면 원하는대로 구현이 가능했을것임 .. 

찾으면 더 나은 방법을 찾을 수 있을거같긴한데... 이렇게 쓰는게 spring 구조상 정석처럼 쓰는게 아니어서 

굳이 이방법을 고수하지는 않았음.. 

@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		Log.info("==================== afterCompletion!!" + request.getParameter("apiAccessCredential"));
		
		Log.info("Request URI ===> " + request.getRequestURI());
		Log.info("Request URI ===> " + handler);
		
		if (handler instanceof HandlerMethod) 
		{ // HandlerMethod 는 후에 실행할 컨트롤러의 메소드 입니다. // 메소드명, 인스턴스, 타입, 사용된 Annotation 들을 확인할 수 있습니다. 
			HandlerMethod method = (HandlerMethod) handler;
			
			AutoController a = (AutoController) method.getBean();
		
			Log.info("Request URI ===> " + a.toString());
			try {
				Log.info("handler method name : " + a.autoPost(request.getParameter("apiAccessCredential"), request.getParameter("date"), request.getParameter("forceyn")));
			} catch (Throwable e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		}
 }

 

아래 주소에는 다른 방법이 있긴있음.. 구현해보진 않아서 가능한지는 모름

https://stackoverflow.com/questions/21193380/get-requestbody-and-responsebody-at-handlerinterceptor

반응형

댓글