250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스프링부트
- springboot
- #이클립스
- Spring
- 스프링
- #자바가상머신
- IntelliJ
- #java
- 설정
- Plugins
- 이클립스
- CodeGlance
- #JVM
- 소스코드 맵
- 환경설정
- #오라클
- mariadb
- Eclipse
- html
- Oracle
- #eclipse
- 인텔리제이
- 설치
- Like
- #Oracle
- #자바
- 오라클
- log4j2
- log4j
- 플러그인
Archives
- Today
- Total
커피와 개발자
Argument Resolver 설정 본문
728x90
아규먼트 리졸버(Argument Resolver)
Controller로 들어온 파라미터를 가공하거나 수정 기능을 제공하는 객체입니다. Argument Resolver를 Controller단에서 사용하면 중복 코드(HttpSession에서 세션 로드, HttpServletRequest에서 요청 Parameter, URL 및 IP 정보 로드 등)를 깔끔하게 처리할 수 있습니다.
커스텀 어노테이션(Custom Annotation) 작성 :
annotation 패키지를 생성하고 Params.java 파일에 사용자 어노테이션 @interface를 작성합니다.
- @Target : 어노테이션이 생성될 수 있는 위치를 지정합니다. 파라미터(PARAMETER) 면 메서드의 파라미터로 선언된 객체에서만 사용 가능합니다.
- @Retention : 어노테이션의 메모리 생명 주기를 지정합니다. 런타임(RUNTIME)에도 해당 어노테이션 객체는 메모리에 올라가 있습니다.
리졸버(resolver)를 설정하기 전 사전 준비작업으로 다음을 실행합니다.
pom.xml - dependency 적용 :
pom.xml 파일에 FastHashMap을 사용하기 위해 라이브러리를 받습니다.
다음으로는 resolver 패키지를 생성하여 패키지 하위에 파라미터를 받아서 처리할 Map객체를 정의하고 파라미터를 전달받은 VO객체를 생성합니다.
ParamsMap 객체 정의 :
이번에 설정할 리졸버는 아규먼트 리졸버 즉, 파라미터를 받아 처리할 것입니다. ParamsArgumentResolver.java 파일을 resolver 패키지에 생성하고 HandlerMethodArgumentResolver 인터페이스를 상속받는 구현체 클래스를 생성합니다.
이 인터페이스는 개발자가 커스텀하는 Argument Resolver에 대한 여러 메서드를 지원합니다.
아규먼트 리졸버(ArgumentResolver) 설정 :
- supportsParameter 메서드는 들어온 파라미터에 대해 resolveArgument 메서드를 실행할지 말지 판단합니다. 리턴 값이 true면 결과적으로 resolveArgument 메서드를 실행하게 되는데, 이 메서드는 파라미터를 가공하는 역할을 합니다.
결과 확인 :
http://localhost:9090/sample 접속 후 로그 확인
2022-05-24 00:37:59,138 [INFO ] [http-nio-9090-exec-3] s.p.s.c.i.LoggerInterceptor: /********** BEGIN **************************************************
2022-05-24 00:37:59,139 [INFO ] [http-nio-9090-exec-3] s.p.s.c.i.LoggerInterceptor: * Request URI : /sample
2022-05-24 00:37:59,168 [INFO ] [http-nio-9090-exec-3] s.p.s.c.r.ParamsArgumentResolver: #1 Parameter : zipcode = 97201
2022-05-24 00:37:59,169 [INFO ] [http-nio-9090-exec-3] s.p.s.c.r.ParamsArgumentResolver: #2 Parameter : size = 5000
2022-05-24 00:37:59,209 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: * AspectJ : Around Logging BEGIN
2022-05-24 00:37:59,210 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: * Controller : std.pjt.springboot.sample.controller.SampleController.page()
2022-05-24 00:37:59,211 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: * AspectJ : Before Logging BEGIN
2022-05-24 00:37:59,211 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: * AspectJ : Before Logging END
2022-05-24 00:37:59,213 [INFO ] [http-nio-9090-exec-3] s.p.s.s.c.SampleController: Controller params : ParamsVO(jsonString={"zipcode":"97201","size":"5000"}, paramsMap={zipcode=97201, size=5000})
2022-05-24 00:37:59,244 [INFO ] [http-nio-9090-exec-3] s.p.s.s.c.SampleController: HashMap put 50000 Object using0.023s
2022-05-24 00:37:59,256 [INFO ] [http-nio-9090-exec-3] s.p.s.s.c.SampleController: FastHashMap put 50000 Object using0.01s
2022-05-24 00:37:59,273 [INFO ] [http-nio-9090-exec-3] s.p.s.s.c.SampleController: HashMap get 50000 Object using0.013s
2022-05-24 00:37:59,278 [INFO ] [http-nio-9090-exec-3] s.p.s.s.c.SampleController: FastHashMap get 50000 Object using0.002s
2022-05-24 00:37:59,278 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: * AspectJ : AfterReturning Logging BEGIN
2022-05-24 00:37:59,279 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: * AspectJ : AfterReturning Logging END
2022-05-24 00:37:59,279 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: * AspectJ : ModelAndView [view="jsonView"; model={HashMapPUT=HashMap put 50000 Object using0.023s, FastHashMapPUT=FastHashMap put 50000 Object using0.01s, HashMapGET=HashMap get 50000 Object using0.013s, FastHashMapGET=FastHashMap get 50000 Object using0.002s}]
2022-05-24 00:37:59,279 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: * AspectJ : Around Logging END
2022-05-24 00:37:59,279 [INFO ] [http-nio-9090-exec-3] s.p.s.c.i.LoggerInterceptor: *********** END ***************************************************/
2022-05-24 00:37:59,297 [INFO ] [http-nio-9090-exec-3] s.p.s.c.i.LoggerInterceptor: * afterCompletion ...
728x90
'프로젝트 > Spring Boot' 카테고리의 다른 글
Mybatis 적용 (0) | 2022.10.11 |
---|---|
DataBase 연동 (MariaDB, HikariCP) (0) | 2022.10.11 |
jsonView 설정 (0) | 2022.10.11 |
AOP(Aspect Oriented Programming) 설정 (0) | 2022.10.11 |
Interceptor 설정 (0) | 2022.10.11 |
Comments