조건에 따라 정렬 방식을 선택할 수 있는 기능을 구현하려고 했는데
너무 생각 없이 로직을 짜버렸다....
이렇게 지저분하게 짤 것이 아니라 동적 SQL문을 활용하면 훨씬 깔끔하고 간결할텐데
하는 생각이 불현듯 들어서 정리를 했다.
조건은 총 6개다
전체포인트 - 오름차순 / 내림차순
가용포인트 - 오름차순 / 내림차순
사용포인트 - 오름차순 / 내림차순
그래서 나는 메소드를 6개를 만들어 버린 것이다.. ^^ 컨트롤러, 서비스, 레파지토리에.... 6개씩..
SQL문도 6개...
이것을 모두 1개로 정리했다.
매핑 URI 값에 가변 변수를 하나 추가했다. 그래서 두개를 받는다.
pointArrange 부분에 totalAsc / totalDesc / reqAsc / reqDesc / useAsc / useDesc 총 6개의 값이 들어오고
pageNum 에는 페이지 넘버가 들어온다.
그리고 매개변수로 들어온 pointArrange 값을 가지고 서비스와 레파지토리를 거쳐 매퍼 파일로 들어간다.
각 조건에 따라 다른 order by 절을 실행한다.
정상적으로 돌아가는 것을 확인하고
가입 승인 회원 조회, 가입 미승인 회원 조회, 탈퇴 상태 회원 조회 이 3개의 메소드도 하나로 묶어 버렸다.
페이징 처리 때문에 목록을 만들기 위해서는 원래 가변 변수 int pageNum 을 받아야 하고
memberState, pointArrange를 가변 변수로 받는다.
그런데 오류가 난다.....
java.lang.IllegalStateException: Ambiguous handler methods mapped for '/api/member/members/approvaly/1':
java.lang.IllegalStateException: Ambiguous handler methods mapped for '/api/member/members/approvaly/1': {public com.nordic.dto.common.ResponseDto com.nordic.api.MemberApiController.PointArrange(java.lang.String,int) throws java.lang.Exception, public com.nordic.dto.common.ResponseDto com.nordic.api.MemberApiController.MemberState(java.lang.String,int) throws java.lang.Exception}
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:432) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:383) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:125) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:67) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:498) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1265) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1047) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.23.jar:5.3.23]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:670) ~[tomcat-embed-core-9.0.68.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.23.jar:5.3.23]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:779) ~[tomcat-embed-core-9.0.68.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.68.jar:9.0.68]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.68.jar:9.0.68]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.23.jar:5.3.23]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.23.jar:5.3.23]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.68.jar:9.0.68]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.68.jar:9.0.68]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_333]
매핑이 모호하다는 메시지를 보고 생각을 해봤는데
포인트 정렬의 매핑값은 "/members/{pointArrange}/{pageNum}" 이고
활동 상태별 정렬의 매핑값은 "/members/{memberState}/{pageNum}" 이라서
제대로 매핑이 안 되는 듯 했다.
그래서 uri 형식을 약간 변경해주었다.
그랬더니 해결!
'프로젝트 > 파이널 프로젝트' 카테고리의 다른 글
html 백틱 -> jsp \ (0) | 2022.12.13 |
---|---|
MySql 비밀번호 암호화, 복호화 - sha256, AES-ENCRYPT, AES-DECRYPT, base64 (0) | 2022.12.12 |
프로젝트 20일차 / Mybatis 동적 SQL문 (0) | 2022.12.10 |
@ModelAttibute, @RequestBody (0) | 2022.12.07 |
프로젝트 17일차 / fetch put 회원정보수정 시 백으로 데이터가 넘어오지 않는 현상 (ajax로 해결) (0) | 2022.12.07 |