From 0f5defb2d08bc303579e435b7f8034ef80b11948 Mon Sep 17 00:00:00 2001 From: grtsinry43 Date: Mon, 19 May 2025 19:05:43 +0800 Subject: [PATCH] Refactor project structure and enhance functionality - Renamed XML mapper files for consistency. - Added new fields `is_admin` and `is_banned` to the `Reader` entity and updated the database schema. - Introduced `AuthCheck` annotation for method-level authorization. - Implemented JWT utility for token generation and validation. - Enhanced service and controller layers for `Book`, `Reader`, and `Orders` with new methods and improved error handling. - Added global exception handling for better API response management. - Updated `pom.xml` to include new dependencies for JWT and Spring Security. --- logs/book-management.log | 1962 +++++++++++++++++ pom.xml | 19 +- .../bookmanagement/annotation/AuthCheck.java | 17 + .../bookmanagement/aop/AuthInterceptor.java | 114 + .../bookmanagement/common/ApiResponse.java | 50 + .../common/BusinessException.java | 19 + .../bookmanagement/common/ErrorCode.java | 33 + .../bookmanagement/common/UserRole.java | 54 + .../controller/BookController.java | 80 +- .../controller/GlobalExceptionHandler.java | 71 + .../controller/OrdersController.java | 136 +- .../controller/ReaderController.java | 121 +- .../dto/CreateOrderRequest.java | 20 + .../bookmanagement/dto/LoginRequest.java | 29 + .../bookmanagement/dto/RegisterRequest.java | 18 + .../bookmanagement/entity/Reader.java | 13 +- .../bookmanagement/mapper/AuthorMapper.java | 2 + .../mapper/BookAuthorMapper.java | 2 + .../bookmanagement/mapper/BookMapper.java | 19 + .../mapper/OrderItemMapper.java | 10 + .../bookmanagement/mapper/OrdersMapper.java | 14 + .../mapper/PublisherMapper.java | 2 + .../bookmanagement/mapper/ReaderMapper.java | 23 +- .../bookmanagement/service/BookService.java | 18 +- .../bookmanagement/service/OrdersService.java | 14 +- .../bookmanagement/service/ReaderService.java | 61 +- .../service/impl/BookServiceImpl.java | 47 +- .../service/impl/OrdersServiceImpl.java | 72 +- .../service/impl/ReaderServiceImpl.java | 99 +- .../bookmanagement/util/JwtUtil.java | 69 + .../bookmanagement/vo/ReaderVO.java | 78 + src/main/resources/application.properties | 6 +- .../{xml => mapper}/AuthorMapper.xml | 0 .../{xml => mapper}/BookAuthorMapper.xml | 0 src/main/resources/mapper/BookMapper.xml | 49 + src/main/resources/mapper/OrderItemMapper.xml | 24 + src/main/resources/mapper/OrdersMapper.xml | 26 + .../{xml => mapper}/PublisherMapper.xml | 0 src/main/resources/mapper/ReaderMapper.xml | 30 + src/main/resources/sql/init.sql | 2 + src/main/resources/xml/BookMapper.xml | 5 - src/main/resources/xml/OrderItemMapper.xml | 5 - src/main/resources/xml/OrdersMapper.xml | 5 - src/main/resources/xml/ReaderMapper.xml | 5 - 44 files changed, 3395 insertions(+), 48 deletions(-) create mode 100644 src/main/java/com/grtsinry43/bookmanagement/annotation/AuthCheck.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/aop/AuthInterceptor.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/common/ApiResponse.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/common/BusinessException.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/common/ErrorCode.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/common/UserRole.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/controller/GlobalExceptionHandler.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/dto/CreateOrderRequest.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/dto/LoginRequest.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/dto/RegisterRequest.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/util/JwtUtil.java create mode 100644 src/main/java/com/grtsinry43/bookmanagement/vo/ReaderVO.java rename src/main/resources/{xml => mapper}/AuthorMapper.xml (100%) rename src/main/resources/{xml => mapper}/BookAuthorMapper.xml (100%) create mode 100644 src/main/resources/mapper/BookMapper.xml create mode 100644 src/main/resources/mapper/OrderItemMapper.xml create mode 100644 src/main/resources/mapper/OrdersMapper.xml rename src/main/resources/{xml => mapper}/PublisherMapper.xml (100%) create mode 100644 src/main/resources/mapper/ReaderMapper.xml delete mode 100644 src/main/resources/xml/BookMapper.xml delete mode 100644 src/main/resources/xml/OrderItemMapper.xml delete mode 100644 src/main/resources/xml/OrdersMapper.xml delete mode 100644 src/main/resources/xml/ReaderMapper.xml diff --git a/logs/book-management.log b/logs/book-management.log index a4876b3..0dfe137 100644 --- a/logs/book-management.log +++ b/logs/book-management.log @@ -61,3 +61,1965 @@ Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No q at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:785) ... 22 common frames omitted 2025-05-19 16:35:01.300 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@89c10b7 +2025-05-19 16:48:20.746 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@55795845 +2025-05-19 16:53:06.501 | [http-nio-8080-exec-3] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy72.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:32) + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:28) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 16:54:06.390 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@89c10b7 +2025-05-19 16:54:13.689 | [http-nio-8080-exec-2] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy72.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:32) + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:28) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 16:54:14.665 | [http-nio-8080-exec-3] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy72.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:32) + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:28) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 16:55:44.743 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@89c10b7 +2025-05-19 16:55:46.946 | [http-nio-8080-exec-1] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy74.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:32) + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:28) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 16:55:48.135 | [http-nio-8080-exec-2] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy74.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:32) + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:28) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 16:57:19.914 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@89c10b7 +2025-05-19 16:57:22.308 | [http-nio-8080-exec-1] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy75.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:33) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:724) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl$$SpringCGLIB$$0.getAllBooks() + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:28) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 16:57:23.108 | [http-nio-8080-exec-2] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy75.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:33) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:724) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl$$SpringCGLIB$$0.getAllBooks() + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:28) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 16:57:56.087 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@89c10b7 +2025-05-19 16:57:58.834 | [http-nio-8080-exec-1] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy75.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:33) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:724) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl$$SpringCGLIB$$0.getAllBooks() + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:30) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 16:57:59.935 | [http-nio-8080-exec-2] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy75.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:33) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:724) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl$$SpringCGLIB$$0.getAllBooks() + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:30) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 16:59:03.789 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@89c10b7 +2025-05-19 16:59:07.856 | [http-nio-8080-exec-1] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy75.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:33) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:724) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl$$SpringCGLIB$$0.getAllBooks() + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:28) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 17:00:39.538 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4fe89c24 +2025-05-19 17:00:42.244 | [http-nio-8080-exec-1] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy75.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:33) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:724) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl$$SpringCGLIB$$0.getAllBooks() + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:28) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 17:02:25.123 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4fe89c24 +2025-05-19 17:02:28.139 | [http-nio-8080-exec-1] | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] | Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll] with root cause +org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.grtsinry43.bookmanagement.mapper.BookMapper.findAll + at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:229) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedInvoker$0(MybatisMapperProxy.java:103) + at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) + at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedInvoker(MybatisMapperProxy.java:101) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:93) + at jdk.proxy2/jdk.proxy2.$Proxy75.findAll(Unknown Source) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl.getAllBooks(BookServiceImpl.java:33) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:724) + at com.grtsinry43.bookmanagement.service.impl.BookServiceImpl$$SpringCGLIB$$0.getAllBooks() + at com.grtsinry43.bookmanagement.controller.BookController.getAllBooks(BookController.java:28) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +2025-05-19 17:03:05.565 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:03:05.569 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 17:03:05.572 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 17:03:05.595 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:03:05.619 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:03:05.660 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:03:06.383 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4fe89c24 +2025-05-19 17:03:07.728 | [http-nio-8080-exec-1] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Preparing: SELECT * FROM book +2025-05-19 17:03:07.753 | [http-nio-8080-exec-1] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Parameters: +2025-05-19 17:03:07.774 | [http-nio-8080-exec-1] | DEBUG | c.g.b.mapper.BookMapper.findAll | <== Total: 0 +2025-05-19 17:03:08.634 | [http-nio-8080-exec-2] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Preparing: SELECT * FROM book +2025-05-19 17:03:08.634 | [http-nio-8080-exec-2] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Parameters: +2025-05-19 17:03:08.634 | [http-nio-8080-exec-2] | DEBUG | c.g.b.mapper.BookMapper.findAll | <== Total: 0 +2025-05-19 17:03:48.888 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:03:48.893 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 17:03:48.897 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 17:03:48.923 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:03:48.950 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:03:48.999 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:03:49.972 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4fe89c24 +2025-05-19 17:03:52.064 | [http-nio-8080-exec-1] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Preparing: SELECT * FROM book +2025-05-19 17:03:52.085 | [http-nio-8080-exec-1] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Parameters: +2025-05-19 17:03:52.105 | [http-nio-8080-exec-1] | DEBUG | c.g.b.mapper.BookMapper.findAll | <== Total: 0 +2025-05-19 17:07:09.343 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:07:09.345 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 17:07:09.347 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 17:07:09.363 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:07:09.378 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:07:09.407 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:07:09.916 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4fe89c24 +2025-05-19 17:41:56.574 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:41:56.576 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 17:41:56.578 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 17:41:56.593 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:41:56.610 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:41:57.181 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@55795845 +2025-05-19 17:42:02.211 | [http-nio-8080-exec-3] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 17:42:23.262 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:42:23.266 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 17:42:23.268 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 17:42:23.287 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:42:23.305 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 17:42:24.233 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4fe89c24 +2025-05-19 17:42:35.725 | [http-nio-8080-exec-3] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:33:48.455 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:33:48.458 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:33:48.459 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:33:48.473 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:33:48.486 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:33:48.514 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:33:48.968 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4fe89c24 +2025-05-19 18:33:55.167 | [http-nio-8080-exec-3] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:34:47.809 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:34:47.813 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:34:47.816 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:34:47.843 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:34:47.870 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:34:47.923 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:34:48.726 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4fe89c24 +2025-05-19 18:34:49.444 | [http-nio-8080-exec-3] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:34:50.596 | [http-nio-8080-exec-6] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:34:51.307 | [http-nio-8080-exec-9] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:42:33.001 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:42:33.002 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:42:33.003 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:42:33.012 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:42:33.022 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:42:33.042 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:42:33.436 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@3d08f3f5 +2025-05-19 18:42:36.311 | [http-nio-8080-exec-3] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:43:21.064 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:43:21.068 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:43:21.071 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:43:21.098 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:43:21.126 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:43:21.170 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:43:22.133 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4fe89c24 +2025-05-19 18:43:23.234 | [http-nio-8080-exec-3] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:43:30.186 | [http-nio-8080-exec-4] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Preparing: SELECT * FROM book +2025-05-19 18:43:30.220 | [http-nio-8080-exec-4] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Parameters: +2025-05-19 18:43:30.251 | [http-nio-8080-exec-4] | DEBUG | c.g.b.mapper.BookMapper.findAll | <== Total: 0 +2025-05-19 18:44:14.102 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:44:14.104 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:44:14.105 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:44:14.115 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:44:14.126 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:44:14.146 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:44:14.551 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@7fd4acee +2025-05-19 18:44:16.092 | [http-nio-8080-exec-1] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Preparing: SELECT * FROM book +2025-05-19 18:44:16.115 | [http-nio-8080-exec-1] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Parameters: +2025-05-19 18:44:16.136 | [http-nio-8080-exec-1] | DEBUG | c.g.b.mapper.BookMapper.findAll | <== Total: 0 +2025-05-19 18:44:18.297 | [http-nio-8080-exec-2] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Preparing: SELECT * FROM book +2025-05-19 18:44:18.297 | [http-nio-8080-exec-2] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Parameters: +2025-05-19 18:44:18.298 | [http-nio-8080-exec-2] | DEBUG | c.g.b.mapper.BookMapper.findAll | <== Total: 0 +2025-05-19 18:44:21.092 | [http-nio-8080-exec-5] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:44:36.761 | [http-nio-8080-exec-8] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:46:04.267 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:46:04.269 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:46:04.270 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:46:04.279 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:46:04.291 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:46:04.318 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:46:04.742 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@7fd4acee +2025-05-19 18:46:09.870 | [http-nio-8080-exec-3] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:705) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:707) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:114) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:46:57.106 | [http-nio-8080-exec-6] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:705) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:707) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:114) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:48:20.691 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:48:20.696 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:48:20.699 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:48:20.720 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:48:20.749 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:48:20.800 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:48:21.736 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1a1da881 +2025-05-19 18:49:16.454 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:49:16.458 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:49:16.462 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:49:16.480 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:49:16.502 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:49:16.557 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:49:17.492 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1a1da881 +2025-05-19 18:49:21.483 | [http-nio-8080-exec-3] | ERROR | c.g.b.c.GlobalExceptionHandler | 系统异常: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' +jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' + at org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springdoc.core.service.GenericResponseService.getGenericMapResponse(GenericResponseService.java:704) + at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:246) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:499) + at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:676) + at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:219) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:200) + at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:170) + at java.base/java.util.Optional.ifPresent(Optional.java:178) + at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:149) + at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) + at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) + at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + ... 39 common frames omitted +2025-05-19 18:49:23.876 | [http-nio-8080-exec-4] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Preparing: SELECT * FROM book +2025-05-19 18:49:23.900 | [http-nio-8080-exec-4] | DEBUG | c.g.b.mapper.BookMapper.findAll | ==> Parameters: +2025-05-19 18:49:23.922 | [http-nio-8080-exec-4] | DEBUG | c.g.b.mapper.BookMapper.findAll | <== Total: 0 +2025-05-19 18:50:20.986 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:50:20.989 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:50:20.992 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:50:21.009 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:50:21.030 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:50:21.069 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:50:21.690 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1a1da881 +2025-05-19 18:53:11.350 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:53:11.352 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:53:11.353 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:53:11.365 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:53:11.376 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:53:11.397 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:53:11.817 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6175619b +2025-05-19 18:53:20.760 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:53:20.763 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:53:20.766 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:53:20.786 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:53:20.806 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:53:20.846 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:53:21.477 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6175619b +2025-05-19 18:56:17.401 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.BookMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:56:17.404 | [main] | WARN | c.b.m.core.injector.methods.Delete | [com.grtsinry43.bookmanagement.mapper.BookMapper.delete] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Delete] +2025-05-19 18:56:17.407 | [main] | WARN | c.b.m.core.injector.methods.Update | [com.grtsinry43.bookmanagement.mapper.BookMapper.update] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Update] +2025-05-19 18:56:17.425 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrderItemMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:56:17.445 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.OrdersMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:56:17.484 | [main] | WARN | c.b.m.core.injector.methods.Insert | [com.grtsinry43.bookmanagement.mapper.ReaderMapper.insert] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.Insert] +2025-05-19 18:56:18.102 | [main] | INFO | c.b.m.e.s.MybatisPlusApplicationContextAware | Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6175619b +2025-05-19 18:57:39.405 | [http-nio-8080-exec-6] | DEBUG | c.g.b.m.ReaderMapper.findByUsername | ==> Preparing: SELECT * FROM reader WHERE username = ? +2025-05-19 18:57:39.428 | [http-nio-8080-exec-6] | DEBUG | c.g.b.m.ReaderMapper.findByUsername | ==> Parameters: test(String) +2025-05-19 18:57:39.447 | [http-nio-8080-exec-6] | DEBUG | c.g.b.m.ReaderMapper.findByUsername | <== Total: 0 +2025-05-19 18:57:39.651 | [http-nio-8080-exec-6] | DEBUG | c.g.b.mapper.ReaderMapper.insert | ==> Preparing: INSERT INTO reader (username, password, email, phone, is_admin, is_banned) VALUES (?, ?, ?, ?, ?, ?) +2025-05-19 18:57:39.652 | [http-nio-8080-exec-6] | DEBUG | c.g.b.mapper.ReaderMapper.insert | ==> Parameters: test(String), $2a$10$IJzZQvK.4GbRbkW4IWPcSep/sv7BP1fQ/56jMVouKVE4NV8rnZz5W(String), 123@example.com(String), 11122223333(String), false(Boolean), false(Boolean) +2025-05-19 18:57:39.664 | [http-nio-8080-exec-6] | DEBUG | c.g.b.mapper.ReaderMapper.insert | <== Updates: 1 +2025-05-19 18:58:04.361 | [http-nio-8080-exec-7] | DEBUG | c.g.b.m.ReaderMapper.findByUsername | ==> Preparing: SELECT * FROM reader WHERE username = ? +2025-05-19 18:58:04.362 | [http-nio-8080-exec-7] | DEBUG | c.g.b.m.ReaderMapper.findByUsername | ==> Parameters: test(String) +2025-05-19 18:58:04.364 | [http-nio-8080-exec-7] | DEBUG | c.g.b.m.ReaderMapper.findByUsername | <== Total: 1 diff --git a/pom.xml b/pom.xml index c5802d3..dea7391 100644 --- a/pom.xml +++ b/pom.xml @@ -63,11 +63,11 @@ true - + - com.github.xiaoymin + com.github.xingfudeshi knife4j-openapi3-jakarta-spring-boot-starter - 4.5.0 + 4.6.0 @@ -88,6 +88,19 @@ compile + + + com.auth0 + java-jwt + 4.5.0 + + + + + org.springframework.security + spring-security-crypto + + com.baomidou diff --git a/src/main/java/com/grtsinry43/bookmanagement/annotation/AuthCheck.java b/src/main/java/com/grtsinry43/bookmanagement/annotation/AuthCheck.java new file mode 100644 index 0000000..27de40f --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/annotation/AuthCheck.java @@ -0,0 +1,17 @@ +package com.grtsinry43.bookmanagement.annotation; + +import com.grtsinry43.bookmanagement.common.UserRole; + +import java.lang.annotation.*; + +/** + * @author grtsinry43 + * @date 2024/9/8 14:41 + * @description 少年负壮气,奋烈自有时! + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface AuthCheck { + UserRole requiredRole() default UserRole.NOT_LOGIN; +} diff --git a/src/main/java/com/grtsinry43/bookmanagement/aop/AuthInterceptor.java b/src/main/java/com/grtsinry43/bookmanagement/aop/AuthInterceptor.java new file mode 100644 index 0000000..ae8b0cf --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/aop/AuthInterceptor.java @@ -0,0 +1,114 @@ +package com.grtsinry43.bookmanagement.aop; + +import com.grtsinry43.bookmanagement.annotation.AuthCheck; +import com.grtsinry43.bookmanagement.common.BusinessException; +import com.grtsinry43.bookmanagement.common.ErrorCode; +import com.grtsinry43.bookmanagement.common.UserRole; +import com.grtsinry43.bookmanagement.entity.Reader; +import com.grtsinry43.bookmanagement.service.ReaderService; +import com.grtsinry43.bookmanagement.util.JwtUtil; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +/** + * @author grtsinry43 + * @date 2024/9/8 14:48 + * @description 少年负壮气,奋烈自有时! + */ +@Component +public class AuthInterceptor implements HandlerInterceptor { + + private final ReaderService readerService; + + public AuthInterceptor(ReaderService readerService) { + this.readerService = readerService; + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (handler instanceof HandlerMethod) { + HandlerMethod method = (HandlerMethod) handler; + AuthCheck authCheck = method.getMethodAnnotation(AuthCheck.class); + if (authCheck != null) { + // 根据传入的注解获取所需的权限 + UserRole requiredRole = authCheck.requiredRole(); + String token = request.getHeader("Authorization"); + + if (requiredRole == UserRole.NOT_LOGIN) { + // 未登录可以访问无需登录的接口 + return true; + } + + if (token == null || token.isEmpty() || !token.startsWith("Bearer ")) { + // 未登录访问需要登录的接口,返回未授权 + System.out.println("Token missing or invalid format for: " + request.getRequestURI()); + throw new BusinessException(ErrorCode.NOT_LOGIN); + } + token = token.substring(7); + + // 先判断是否过期,catch 异常说明 token 无效 + try { + if (JwtUtil.isTokenExpired(token)) { + throw new BusinessException(ErrorCode.NOT_LOGIN); + } + } catch (Exception e) { + throw new BusinessException(ErrorCode.NOT_LOGIN); + } + + String userIdStr = JwtUtil.getUserFromToken(token); + if (userIdStr == null) { + throw new BusinessException(ErrorCode.NOT_LOGIN); + } + + Integer userId; + try { + userId = Integer.parseInt(userIdStr); + } catch (NumberFormatException e) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + + System.out.println("User ID: " + userId + " accessing: " + request.getRequestURI()); + Reader user = readerService.getReaderById(userId); + if (user == null) { + // This case might mean the user was deleted after token issuance + throw new BusinessException(ErrorCode.NOT_FOUND); + } + + // Check if user is banned first, unless they are an admin trying to access an admin-only route. + // An admin should be able to access admin routes even if banned, to potentially unban themselves or others. + // However, a banned admin should not access general user routes. + + if (user.getIsBanned() != null && user.getIsBanned()) { + // If user is banned, they cannot access any route unless it's an admin route and they are an admin. + if (!(user.getIsAdmin() != null && user.getIsAdmin() && requiredRole == UserRole.ADMIN)) { + System.out.println("Banned user ID: " + userId + " attempted to access: " + request.getRequestURI()); + throw new BusinessException(ErrorCode.UNAUTHORIZED); + } + } + + request.setAttribute("userId", userId); + + if (user.getIsAdmin() != null && user.getIsAdmin()) { + // 管理员可以访问所有接口 (already set attribute, so just return true) + System.out.println("Admin user ID: " + userId + " accessed: " + request.getRequestURI()); + return true; + } + + // At this point, user is not an admin. + if (requiredRole == UserRole.ADMIN) { + // 非管理员访问管理员接口,返回无权限 + System.out.println("Non-admin user ID: " + userId + " attempted to access admin route: " + request.getRequestURI()); + throw new BusinessException(ErrorCode.UNAUTHORIZED); + } + + // For regular users, already checked for ban status above. + // If not banned and not admin, and route doesn't require admin, access is granted. + return true; + } + } + return true; + } +} diff --git a/src/main/java/com/grtsinry43/bookmanagement/common/ApiResponse.java b/src/main/java/com/grtsinry43/bookmanagement/common/ApiResponse.java new file mode 100644 index 0000000..daa27c5 --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/common/ApiResponse.java @@ -0,0 +1,50 @@ +package com.grtsinry43.bookmanagement.common; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: grtsinry43 + * @Date: 2024/7/13 上午 12:27 + * 这里规定返回消息格式,所有的正确响应 HTTP 状态码都是 200,只会根据 code 字段和 msg 来提供错误信息 + */ +@Data +public class ApiResponse implements Serializable { + private Integer code; + private String msg = ""; + private T data; + + /** + * 含有数据的成功响应 + * + * @param data 返回的数据 + * @param 数据类型 + */ + public static ApiResponse success(T data) { + ApiResponse response = new ApiResponse<>(); + response.setCode(0); + response.setData(data); + return response; + } + + /** + * 不含数据的成功响应 + */ + public static ApiResponse success() { + return success(null); + } + + /** + * 失败响应,包含错误码和错误信息 + * + * @param code 错误码 + * @param msg 错误信息 + */ + public static ApiResponse error(Integer code, String msg) { + ApiResponse response = new ApiResponse<>(); + response.setCode(code); + response.setMsg(msg); + return response; + } +} diff --git a/src/main/java/com/grtsinry43/bookmanagement/common/BusinessException.java b/src/main/java/com/grtsinry43/bookmanagement/common/BusinessException.java new file mode 100644 index 0000000..ed08bfa --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/common/BusinessException.java @@ -0,0 +1,19 @@ +package com.grtsinry43.bookmanagement.common; + +import lombok.Getter; + +/** + * @author grtsinry43 + * @date 2024/9/8 14:55 + * @description 少年负壮气,奋烈自有时! + */ +@Getter +public class BusinessException extends RuntimeException { + private ErrorCode errorCode; + private String message; + + public BusinessException(ErrorCode errorCode) { + this.errorCode = errorCode; + this.message = errorCode.getMessage(); + } +} diff --git a/src/main/java/com/grtsinry43/bookmanagement/common/ErrorCode.java b/src/main/java/com/grtsinry43/bookmanagement/common/ErrorCode.java new file mode 100644 index 0000000..36cd33f --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/common/ErrorCode.java @@ -0,0 +1,33 @@ +package com.grtsinry43.bookmanagement.common; + +import lombok.Getter; + +/** + * @author grtsinry43 + * @date 2024/9/1 15:44 + * @description 少年负壮气,奋烈自有时! + */ +@Getter +public enum ErrorCode { + PARAMS_ERROR(400, "参数错误"), + NOT_LOGIN(401, "未登录或登录已过期"), + INVALID_DATA(402, "无效数据"), + UNAUTHORIZED(403, "你没有访问该资源的权限"), + BANNED(40301, "你没有访问该资源的权限"), + NOT_FOUND(404, "请求的资源不存在"), + METHOD_NOT_ALLOWED(405, "请求方法不支持"), + INTERNAL_SERVER_ERROR(500, "服务器内部错误"); + + private final int code; + private final String msg; + + ErrorCode(int code, String msg) { + this.code = code; + this.msg = msg; + } + + public String getMessage() { + return msg; + } + +} diff --git a/src/main/java/com/grtsinry43/bookmanagement/common/UserRole.java b/src/main/java/com/grtsinry43/bookmanagement/common/UserRole.java new file mode 100644 index 0000000..fc512e3 --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/common/UserRole.java @@ -0,0 +1,54 @@ +package com.grtsinry43.bookmanagement.common; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 用户角色枚举 + * + * @author grtsinry43 + * @date 2024/9/1 16:14 + */ +@Getter +public enum UserRole { + NOT_LOGIN("未登录", "not_login"), + USER("默认角色", "user"), + ADMIN("管理员角色", "admin"), + BAN("被封禁用户", "ban"); + + private final String text; + + private final String value; + + UserRole(String text, String value) { + this.text = text; + this.value = value; + } + + /** + * 获取值列表 + */ + public static List getValues() { + return Arrays.stream(values()).map(item -> item.value).collect(Collectors.toList()); + } + + /** + * 根据 value 获取枚举 + */ + public static UserRole getEnumByValue(String value) { + if (ObjectUtils.isEmpty(value)) { + return null; + } + for (UserRole anEnum : UserRole.values()) { + if (anEnum.value.equals(value)) { + return anEnum; + } + } + return null; + } + +} diff --git a/src/main/java/com/grtsinry43/bookmanagement/controller/BookController.java b/src/main/java/com/grtsinry43/bookmanagement/controller/BookController.java index 5c37af3..cfeff03 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/controller/BookController.java +++ b/src/main/java/com/grtsinry43/bookmanagement/controller/BookController.java @@ -1,11 +1,20 @@ package com.grtsinry43.bookmanagement.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.grtsinry43.bookmanagement.annotation.AuthCheck; +import com.grtsinry43.bookmanagement.common.ApiResponse; +import com.grtsinry43.bookmanagement.common.BusinessException; +import com.grtsinry43.bookmanagement.common.ErrorCode; +import com.grtsinry43.bookmanagement.common.UserRole; +import com.grtsinry43.bookmanagement.entity.Book; +import com.grtsinry43.bookmanagement.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** *

- * 前端控制器 + * 前端控制器 *

* * @author grtsinry43 @@ -15,4 +24,69 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/book") public class BookController { + @Autowired + private BookService bookService; + + @GetMapping("/all") + public ApiResponse> getAllBooks() { + List books = bookService.getAllBooks(); + return ApiResponse.success(books); + } + + @GetMapping("/{id}") + public ApiResponse getBookById(@PathVariable Integer id) { + Book book = bookService.getBookById(id); + if (book != null) { + return ApiResponse.success(book); + } else { + throw new BusinessException(ErrorCode.NOT_FOUND); + } + } + + @GetMapping("/search/title") + @AuthCheck(requiredRole = UserRole.USER) + public ApiResponse> searchBooksByTitle(@RequestParam String title) { + List books = bookService.getBooksByTitle(title); + return ApiResponse.success(books); + } + + @GetMapping("/search/author") + @AuthCheck(requiredRole = UserRole.USER) + public ApiResponse> searchBooksByAuthor(@RequestParam String authorName) { + List books = bookService.getBooksByAuthor(authorName); + return ApiResponse.success(books); + } + + @GetMapping("/search/publisher") + @AuthCheck(requiredRole = UserRole.USER) + public ApiResponse> searchBooksByPublisher(@RequestParam String publisherName) { + List books = bookService.getBooksByPublisher(publisherName); + return ApiResponse.success(books); + } + + @PostMapping("/admin/add") + @AuthCheck(requiredRole = UserRole.ADMIN) + public ApiResponse addBook(@RequestBody Book book) { + bookService.addBook(book); + return ApiResponse.success(book); + + } + + @PutMapping("/admin/update") + @AuthCheck(requiredRole = UserRole.ADMIN) + public ApiResponse updateBook(@RequestBody Book book) { + + bookService.updateBook(book); + return ApiResponse.success(book); + + } + + @DeleteMapping("/admin/delete/{id}") + @AuthCheck(requiredRole = UserRole.ADMIN) + public ApiResponse deleteBook(@PathVariable Integer id) { + + bookService.deleteBook(id); + return ApiResponse.success(null); + + } } diff --git a/src/main/java/com/grtsinry43/bookmanagement/controller/GlobalExceptionHandler.java b/src/main/java/com/grtsinry43/bookmanagement/controller/GlobalExceptionHandler.java new file mode 100644 index 0000000..7aee5fb --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/controller/GlobalExceptionHandler.java @@ -0,0 +1,71 @@ +package com.grtsinry43.bookmanagement.controller; + +import com.grtsinry43.bookmanagement.common.ApiResponse; +import com.grtsinry43.bookmanagement.common.BusinessException; +import jakarta.validation.ConstraintViolationException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +/** + * @author grtsinry43 + * @date 2024/7/13 上午12:29 + * @description 规定触发异常时的返回格式,依然是HTTP状态码200,只会根据code字段和msg来提供错误信息 + */ +@Slf4j +@ControllerAdvice +public class GlobalExceptionHandler { + /** + * 处理缺少请求参数异常 + */ + @ExceptionHandler(MissingServletRequestParameterException.class) + public ResponseEntity> handleMissingServletRequestParameterException(Exception ex) { + String errorMessage = "缺少请求参数:" + ex.getMessage(); + ApiResponse apiResponse = ApiResponse.error(400, errorMessage); + return new ResponseEntity<>(apiResponse, HttpStatus.OK); + } + + /** + * 处理参数校验异常(注释声明即可) + */ + @ExceptionHandler(ConstraintViolationException.class) + public ResponseEntity> handleConstraintViolationException(ConstraintViolationException ex) { + String errorMessage = ex.getMessage(); + ApiResponse apiResponse = ApiResponse.error(400, errorMessage); + return new ResponseEntity<>(apiResponse, HttpStatus.OK); + } + + /** + * 处理参数校验异常(注释声明即可) + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) { + ApiResponse apiResponse = ApiResponse.error(400, "参数传递有误或者缺少参数"); + return new ResponseEntity<>(apiResponse, HttpStatus.OK); + } + + /** + * 处理业务逻辑异常(注释声明即可) + */ + @ExceptionHandler(BusinessException.class) + public ResponseEntity> handleBusinessException(BusinessException ex) { + String errorMessage = ex.getMessage(); + ApiResponse apiResponse = ApiResponse.error(ex.getErrorCode().getCode(), errorMessage); + return new ResponseEntity<>(apiResponse, HttpStatus.OK); + } + + /** + * 处理其他异常(注释声明即可) + */ + @ExceptionHandler(Exception.class) + public ResponseEntity> handleException(Exception ex) { + String errorMessage = ex.getMessage(); + log.error("系统异常: {}", errorMessage, ex); // 使用日志框架记录异常,包含完整堆栈 + ApiResponse apiResponse = ApiResponse.error(500, "服务器发生内部错误,您可以尝试刷新,如果问题依旧,请联系我们"); + return new ResponseEntity<>(apiResponse, HttpStatus.OK); + } +} \ No newline at end of file diff --git a/src/main/java/com/grtsinry43/bookmanagement/controller/OrdersController.java b/src/main/java/com/grtsinry43/bookmanagement/controller/OrdersController.java index db43683..4d74b4b 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/controller/OrdersController.java +++ b/src/main/java/com/grtsinry43/bookmanagement/controller/OrdersController.java @@ -1,11 +1,24 @@ package com.grtsinry43.bookmanagement.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.grtsinry43.bookmanagement.annotation.AuthCheck; +import com.grtsinry43.bookmanagement.common.ApiResponse; +import com.grtsinry43.bookmanagement.common.BusinessException; +import com.grtsinry43.bookmanagement.common.ErrorCode; +import com.grtsinry43.bookmanagement.common.UserRole; +import com.grtsinry43.bookmanagement.dto.CreateOrderRequest; +import com.grtsinry43.bookmanagement.entity.OrderItem; +import com.grtsinry43.bookmanagement.entity.Orders; +import com.grtsinry43.bookmanagement.service.OrderItemService; // Keep for future use if OrderItem specific endpoints are added +import com.grtsinry43.bookmanagement.service.OrdersService; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** *

- * 前端控制器 + * 订单前端控制器 *

* * @author grtsinry43 @@ -15,4 +28,121 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/orders") public class OrdersController { + @Autowired + private OrdersService ordersService; + + // @Autowired + // private OrderItemService orderItemService; // 如果需要单独操作订单项,则保留 + + /** + * 顾客:创建新订单 + * @param createOrderRequest 包含订单信息和订单项列表的请求体 + * @param request HTTP请求对象,用于获取用户ID + * @return 包含创建的订单信息的API响应 + */ + @PostMapping("/create") + @AuthCheck(requiredRole = UserRole.USER) // 需要用户登录才能创建订单 + public ApiResponse createOrder(@RequestBody CreateOrderRequest createOrderRequest, HttpServletRequest request) { + // 从HttpServletRequest中获取用户ID + Object userIdObject = request.getAttribute("userId"); + if (userIdObject == null) { + throw new BusinessException(ErrorCode.NOT_LOGIN); + } + Integer userId = (Integer) userIdObject; + + // 基本验证:订单项不能为空 + if (createOrderRequest.getItems() == null || createOrderRequest.getItems().isEmpty()) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + + Orders orderToCreate = createOrderRequest.getOrder(); + if (orderToCreate == null) { + // 如果请求中没有order部分,或者需要初始化一个 + orderToCreate = new Orders(); + } + // 设置订单的读者ID为当前登录用户的ID + orderToCreate.setReaderId(userId); + + // 调用服务创建订单 + // 服务层中的 createOrder 方法应该处理库存检查等业务逻辑,并在发生错误时抛出 BusinessException + Orders createdOrder = ordersService.createOrder(orderToCreate, createOrderRequest.getItems()); + return ApiResponse.success(createdOrder); + } + + /** + * 顾客:查看自己的订单列表 + * @param request HTTP请求对象,用于获取用户ID + * @return 包含用户订单列表的API响应 + */ + @GetMapping("/my-orders") // 移除了{readerId}路径参数 + @AuthCheck(requiredRole = UserRole.USER) // 需要用户登录才能查看订单 + public ApiResponse> getMyOrders(HttpServletRequest request) { + // 从HttpServletRequest中获取用户ID + Object userIdObject = request.getAttribute("userId"); + if (userIdObject == null) { + throw new BusinessException(ErrorCode.NOT_LOGIN); + } + Integer userId = (Integer) userIdObject; + + List orders = ordersService.getOrdersByReaderId(userId); + return ApiResponse.success(orders); + } + + /** + * 顾客和管理员:查看特定订单详情 + * (对于顾客,应在服务层或此处增加逻辑,校验订单是否属于该顾客,除非拦截器已处理) + * @param orderId 订单ID + * @param request HTTP请求对象 (如果需要根据用户角色或ID进行权限校验) + * @return 包含订单详情的API响应 + */ + @GetMapping("/{orderId}") + @AuthCheck(requiredRole = UserRole.USER) // 需要用户登录才能查看订单详情 + public ApiResponse getOrderDetails(@PathVariable Integer orderId, HttpServletRequest request) { + // 示例:如果需要基于用户ID的权限检查,可以从request中获取userId + Object userIdObject = request.getAttribute("userId"); + Integer currentUserId = (userIdObject != null) ? (Integer) userIdObject : null; + // TODO: 根据业务需求,添加权限校验逻辑,例如检查订单是否属于当前用户(如果非管理员) + + Orders order = ordersService.getOrderById(orderId); + if (order == null) { + throw new BusinessException(ErrorCode.NOT_FOUND); + } + if (order.getReaderId() != null && !order.getReaderId().equals(currentUserId)) { + // 如果订单属于其他用户,且当前用户不是管理员,则抛出权限异常 + throw new BusinessException(ErrorCode.UNAUTHORIZED); + } + // 考虑:如果用户不是管理员,且订单不属于该用户,也应抛出权限异常 + return ApiResponse.success(order); + } + + /** + * 管理员:查看所有订单列表 + * (假设已有管理员权限拦截器) + * @return 包含所有订单列表的API响应 + */ + @GetMapping("/admin/all") + @AuthCheck(requiredRole = UserRole.ADMIN) // 需要管理员权限才能查看所有订单 + public ApiResponse> getAllOrders() { + List orders = ordersService.getAllOrders(); + return ApiResponse.success(orders); + } + + /** + * 管理员:更新订单状态 + * (假设已有管理员权限拦截器) + * @param orderId 订单ID + * @param status 新的订单状态 + * @return 操作结果的API响应 + */ + @PutMapping("/admin/update-status/{orderId}") + @AuthCheck(requiredRole = UserRole.ADMIN) // 需要管理员权限才能更新订单状态 + public ApiResponse updateOrderStatus(@PathVariable Integer orderId, @RequestParam String status) { + // TODO: 可以增加对status参数有效性的校验 + if (status == null || status.trim().isEmpty()) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + ordersService.updateOrderStatus(orderId, status); + // 更新成功,通常返回成功的消息,data部分可以为null或包含更新后的对象(如果服务层返回) + return ApiResponse.success(null); + } } diff --git a/src/main/java/com/grtsinry43/bookmanagement/controller/ReaderController.java b/src/main/java/com/grtsinry43/bookmanagement/controller/ReaderController.java index e189b4b..8708943 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/controller/ReaderController.java +++ b/src/main/java/com/grtsinry43/bookmanagement/controller/ReaderController.java @@ -1,11 +1,28 @@ package com.grtsinry43.bookmanagement.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.grtsinry43.bookmanagement.annotation.AuthCheck; +import com.grtsinry43.bookmanagement.common.ApiResponse; +import com.grtsinry43.bookmanagement.common.BusinessException; +import com.grtsinry43.bookmanagement.common.ErrorCode; +import com.grtsinry43.bookmanagement.common.UserRole; +import com.grtsinry43.bookmanagement.dto.LoginRequest; +import com.grtsinry43.bookmanagement.dto.RegisterRequest; +import com.grtsinry43.bookmanagement.entity.Reader; +import com.grtsinry43.bookmanagement.service.ReaderService; +import com.grtsinry43.bookmanagement.util.JwtUtil; +import com.grtsinry43.bookmanagement.vo.ReaderVO; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** *

- * 前端控制器 + * 前端控制器 *

* * @author grtsinry43 @@ -15,4 +32,102 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/reader") public class ReaderController { + private final ReaderService readerService; + + @Autowired + public ReaderController(ReaderService readerService) { + this.readerService = readerService; + } + + private ReaderVO convertToReaderVO(Reader reader) { + if (reader == null) { + return null; + } + ReaderVO readerVO = new ReaderVO(); + BeanUtils.copyProperties(reader, readerVO); + return readerVO; + } + + @PostMapping("/register") + @AuthCheck(requiredRole = UserRole.NOT_LOGIN) + public ApiResponse registerReader(@RequestBody RegisterRequest registerRequest) { + if (registerRequest.getUsername() == null || registerRequest.getPassword() == null || + registerRequest.getUsername().trim().isEmpty() || registerRequest.getPassword().isEmpty()) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Reader reader = new Reader(); + BeanUtils.copyProperties(registerRequest, reader); + readerService.registerReader(reader); + return ApiResponse.success(convertToReaderVO(reader)); + } + + @PostMapping("/login") + @AuthCheck(requiredRole = UserRole.NOT_LOGIN) + public ApiResponse> login(@RequestBody LoginRequest loginRequest) { + if (loginRequest.getUsername() == null || loginRequest.getPassword() == null || + loginRequest.getUsername().trim().isEmpty() || loginRequest.getPassword().isEmpty()) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + + Reader loggedInReader = readerService.login(loginRequest.getUsername(), loginRequest.getPassword()); + String token = JwtUtil.generateToken(loggedInReader.getReaderId().toString()); + + Map responseData = new HashMap<>(); + responseData.put("token", token); + responseData.put("user", convertToReaderVO(loggedInReader)); + + return ApiResponse.success(responseData); + } + + @GetMapping("/admin/all") + @AuthCheck(requiredRole = UserRole.ADMIN) + public ApiResponse> getAllReaders() { + List readers = readerService.getAllReaders(); + List readerVOs = readers.stream() + .map(this::convertToReaderVO) + .collect(Collectors.toList()); + return ApiResponse.success(readerVOs); + } + + @GetMapping("/{id}") + @AuthCheck(requiredRole = UserRole.USER) + public ApiResponse getReaderById(@PathVariable Integer id) { + Reader reader = readerService.getReaderById(id); + if (reader == null) { + throw new BusinessException(ErrorCode.NOT_FOUND); + } + return ApiResponse.success(convertToReaderVO(reader)); + } + + @PutMapping("/admin/{id}/make-admin") + @AuthCheck(requiredRole = UserRole.ADMIN) + public ApiResponse makeAdmin(@PathVariable Integer id) { + readerService.updateUserAdminStatus(id, true); + Reader updatedReader = readerService.getReaderById(id); + return ApiResponse.success(convertToReaderVO(updatedReader)); + } + + @PutMapping("/admin/{id}/remove-admin") + @AuthCheck(requiredRole = UserRole.ADMIN) + public ApiResponse removeAdmin(@PathVariable Integer id) { + readerService.updateUserAdminStatus(id, false); + Reader updatedReader = readerService.getReaderById(id); + return ApiResponse.success(convertToReaderVO(updatedReader)); + } + + @PutMapping("/admin/{id}/ban") + @AuthCheck(requiredRole = UserRole.ADMIN) + public ApiResponse banUser(@PathVariable Integer id) { + readerService.updateUserBanStatus(id, true); + Reader updatedReader = readerService.getReaderById(id); + return ApiResponse.success(convertToReaderVO(updatedReader)); + } + + @PutMapping("/admin/{id}/unban") + @AuthCheck(requiredRole = UserRole.ADMIN) + public ApiResponse unbanUser(@PathVariable Integer id) { + readerService.updateUserBanStatus(id, false); + Reader updatedReader = readerService.getReaderById(id); + return ApiResponse.success(convertToReaderVO(updatedReader)); + } } diff --git a/src/main/java/com/grtsinry43/bookmanagement/dto/CreateOrderRequest.java b/src/main/java/com/grtsinry43/bookmanagement/dto/CreateOrderRequest.java new file mode 100644 index 0000000..1388599 --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/dto/CreateOrderRequest.java @@ -0,0 +1,20 @@ +package com.grtsinry43.bookmanagement.dto; + +import com.grtsinry43.bookmanagement.entity.OrderItem; +import com.grtsinry43.bookmanagement.entity.Orders; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 创建订单请求体 + */ +@Data +public class CreateOrderRequest implements Serializable { + private Orders order; + private List items; + + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/grtsinry43/bookmanagement/dto/LoginRequest.java b/src/main/java/com/grtsinry43/bookmanagement/dto/LoginRequest.java new file mode 100644 index 0000000..fd7d2d5 --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/dto/LoginRequest.java @@ -0,0 +1,29 @@ +package com.grtsinry43.bookmanagement.dto; + +import java.io.Serializable; + +/** + * 登录请求体 + */ +public class LoginRequest implements Serializable { + private String username; + private String password; + + private static final long serialVersionUID = 1L; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/com/grtsinry43/bookmanagement/dto/RegisterRequest.java b/src/main/java/com/grtsinry43/bookmanagement/dto/RegisterRequest.java new file mode 100644 index 0000000..7d42e94 --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/dto/RegisterRequest.java @@ -0,0 +1,18 @@ +package com.grtsinry43.bookmanagement.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 注册请求体 + */ +@Data +public class RegisterRequest implements Serializable { + private String username; + private String password; + private String email; + private String phone; + private static final long serialVersionUID = 1L; +} + diff --git a/src/main/java/com/grtsinry43/bookmanagement/entity/Reader.java b/src/main/java/com/grtsinry43/bookmanagement/entity/Reader.java index 171bce6..f5826e9 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/entity/Reader.java +++ b/src/main/java/com/grtsinry43/bookmanagement/entity/Reader.java @@ -21,19 +21,30 @@ import java.io.Serializable; @Getter @Setter @ToString -@ApiModel(value = "Reader对象", description = "") +@ApiModel(value = "Reader对象", description = "读者实体类") public class Reader implements Serializable { private static final long serialVersionUID = 1L; + @ApiModelProperty("读者ID") @TableId(value = "reader_id", type = IdType.AUTO) private Integer readerId; + @ApiModelProperty("用户名") private String username; + @ApiModelProperty("密码") private String password; + @ApiModelProperty("邮箱") private String email; + @ApiModelProperty("电话") private String phone; + + @ApiModelProperty("是否为管理员") + private Boolean isAdmin = false; + + @ApiModelProperty("是否被封禁") + private Boolean isBanned = false; } diff --git a/src/main/java/com/grtsinry43/bookmanagement/mapper/AuthorMapper.java b/src/main/java/com/grtsinry43/bookmanagement/mapper/AuthorMapper.java index a2b0482..bf8c951 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/mapper/AuthorMapper.java +++ b/src/main/java/com/grtsinry43/bookmanagement/mapper/AuthorMapper.java @@ -2,6 +2,7 @@ package com.grtsinry43.bookmanagement.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.grtsinry43.bookmanagement.entity.Author; +import org.apache.ibatis.annotations.Mapper; /** *

@@ -11,6 +12,7 @@ import com.grtsinry43.bookmanagement.entity.Author; * @author grtsinry43 * @since 2025-05-19 */ +@Mapper public interface AuthorMapper extends BaseMapper { } diff --git a/src/main/java/com/grtsinry43/bookmanagement/mapper/BookAuthorMapper.java b/src/main/java/com/grtsinry43/bookmanagement/mapper/BookAuthorMapper.java index 470496b..4db23e4 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/mapper/BookAuthorMapper.java +++ b/src/main/java/com/grtsinry43/bookmanagement/mapper/BookAuthorMapper.java @@ -2,6 +2,7 @@ package com.grtsinry43.bookmanagement.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.grtsinry43.bookmanagement.entity.BookAuthor; +import org.apache.ibatis.annotations.Mapper; /** *

@@ -11,6 +12,7 @@ import com.grtsinry43.bookmanagement.entity.BookAuthor; * @author grtsinry43 * @since 2025-05-19 */ +@Mapper public interface BookAuthorMapper extends BaseMapper { } diff --git a/src/main/java/com/grtsinry43/bookmanagement/mapper/BookMapper.java b/src/main/java/com/grtsinry43/bookmanagement/mapper/BookMapper.java index fe6f947..adfbe7d 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/mapper/BookMapper.java +++ b/src/main/java/com/grtsinry43/bookmanagement/mapper/BookMapper.java @@ -2,6 +2,10 @@ package com.grtsinry43.bookmanagement.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.grtsinry43.bookmanagement.entity.Book; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -11,6 +15,21 @@ import com.grtsinry43.bookmanagement.entity.Book; * @author grtsinry43 * @since 2025-05-19 */ +@Mapper public interface BookMapper extends BaseMapper { + Book findById(@Param("bookId") Integer bookId); + List findAll(); + + List findByTitle(@Param("title") String title); + + List findByAuthor(@Param("authorName") String authorName); + + List findByPublisher(@Param("publisherName") String publisherName); + + int insert(Book book); + + int update(Book book); + + int delete(@Param("bookId") Integer bookId); } diff --git a/src/main/java/com/grtsinry43/bookmanagement/mapper/OrderItemMapper.java b/src/main/java/com/grtsinry43/bookmanagement/mapper/OrderItemMapper.java index 1968727..401b487 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/mapper/OrderItemMapper.java +++ b/src/main/java/com/grtsinry43/bookmanagement/mapper/OrderItemMapper.java @@ -2,6 +2,10 @@ package com.grtsinry43.bookmanagement.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.grtsinry43.bookmanagement.entity.OrderItem; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -11,6 +15,12 @@ import com.grtsinry43.bookmanagement.entity.OrderItem; * @author grtsinry43 * @since 2025-05-19 */ +@Mapper public interface OrderItemMapper extends BaseMapper { + List findByOrderId(@Param("orderId") Integer orderId); + int insert(OrderItem orderItem); + + // For batch insert if needed + // int insertBatch(@Param("list") List orderItems); } diff --git a/src/main/java/com/grtsinry43/bookmanagement/mapper/OrdersMapper.java b/src/main/java/com/grtsinry43/bookmanagement/mapper/OrdersMapper.java index 3d0712d..03ced0e 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/mapper/OrdersMapper.java +++ b/src/main/java/com/grtsinry43/bookmanagement/mapper/OrdersMapper.java @@ -2,6 +2,10 @@ package com.grtsinry43.bookmanagement.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.grtsinry43.bookmanagement.entity.Orders; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -11,6 +15,16 @@ import com.grtsinry43.bookmanagement.entity.Orders; * @author grtsinry43 * @since 2025-05-19 */ +@Mapper public interface OrdersMapper extends BaseMapper { + Orders findById(@Param("orderId") Integer orderId); + List findAll(); // For admin + + List findByReaderId(@Param("readerId") Integer readerId); + + // Consider adding findByDateRange, findByStatus etc. if needed + int insert(Orders order); + + int updateStatus(@Param("orderId") Integer orderId, @Param("status") String status); // Simplified } diff --git a/src/main/java/com/grtsinry43/bookmanagement/mapper/PublisherMapper.java b/src/main/java/com/grtsinry43/bookmanagement/mapper/PublisherMapper.java index c937252..0db1795 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/mapper/PublisherMapper.java +++ b/src/main/java/com/grtsinry43/bookmanagement/mapper/PublisherMapper.java @@ -2,6 +2,7 @@ package com.grtsinry43.bookmanagement.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.grtsinry43.bookmanagement.entity.Publisher; +import org.apache.ibatis.annotations.Mapper; /** *

@@ -11,6 +12,7 @@ import com.grtsinry43.bookmanagement.entity.Publisher; * @author grtsinry43 * @since 2025-05-19 */ +@Mapper public interface PublisherMapper extends BaseMapper { } diff --git a/src/main/java/com/grtsinry43/bookmanagement/mapper/ReaderMapper.java b/src/main/java/com/grtsinry43/bookmanagement/mapper/ReaderMapper.java index dc084c3..40da683 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/mapper/ReaderMapper.java +++ b/src/main/java/com/grtsinry43/bookmanagement/mapper/ReaderMapper.java @@ -2,15 +2,34 @@ package com.grtsinry43.bookmanagement.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.grtsinry43.bookmanagement.entity.Reader; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

- * Mapper 接口 + * Mapper 接口 *

* * @author grtsinry43 * @since 2025-05-19 */ -public interface ReaderMapper extends BaseMapper { +@Mapper +public interface ReaderMapper extends BaseMapper { // 移除了 BaseMapper + Reader findById(@Param("readerId") Integer readerId); + Reader findByUsername(@Param("username") String username); + + List findAll(); + + int insert(Reader reader); + + int updateReaderAdminStatus(@Param("readerId") Integer readerId, @Param("isAdmin") boolean isAdmin); + + int updateReaderBanStatus(@Param("readerId") Integer readerId, @Param("isBanned") boolean isBanned); + + // update and delete methods can be added if needed for admin functionality + // 例如: int update(Reader reader); (如果需要更新Reader所有信息) + // 例如: int deleteById(@Param("readerId") Integer readerId); } diff --git a/src/main/java/com/grtsinry43/bookmanagement/service/BookService.java b/src/main/java/com/grtsinry43/bookmanagement/service/BookService.java index cd4d763..06daae5 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/service/BookService.java +++ b/src/main/java/com/grtsinry43/bookmanagement/service/BookService.java @@ -1,7 +1,7 @@ package com.grtsinry43.bookmanagement.service; import com.grtsinry43.bookmanagement.entity.Book; -import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; /** *

@@ -11,6 +11,20 @@ import com.baomidou.mybatisplus.extension.service.IService; * @author grtsinry43 * @since 2025-05-19 */ -public interface BookService extends IService { +public interface BookService { + Book getBookById(Integer bookId); + List getAllBooks(); + + List getBooksByTitle(String title); + + List getBooksByAuthor(String authorName); + + List getBooksByPublisher(String publisherName); + + void addBook(Book book); + + void updateBook(Book book); + + void deleteBook(Integer bookId); } diff --git a/src/main/java/com/grtsinry43/bookmanagement/service/OrdersService.java b/src/main/java/com/grtsinry43/bookmanagement/service/OrdersService.java index 43a58d7..4cb64fb 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/service/OrdersService.java +++ b/src/main/java/com/grtsinry43/bookmanagement/service/OrdersService.java @@ -1,7 +1,9 @@ package com.grtsinry43.bookmanagement.service; import com.grtsinry43.bookmanagement.entity.Orders; -import com.baomidou.mybatisplus.extension.service.IService; +import com.grtsinry43.bookmanagement.entity.OrderItem; + +import java.util.List; /** *

@@ -11,6 +13,14 @@ import com.baomidou.mybatisplus.extension.service.IService; * @author grtsinry43 * @since 2025-05-19 */ -public interface OrdersService extends IService { +public interface OrdersService { + Orders getOrderById(Integer orderId); + List getAllOrders(); // For admin + + List getOrdersByReaderId(Integer readerId); + + Orders createOrder(Orders order, List items); // Simplified: pass items directly + + void updateOrderStatus(Integer orderId, String status); // Simplified } diff --git a/src/main/java/com/grtsinry43/bookmanagement/service/ReaderService.java b/src/main/java/com/grtsinry43/bookmanagement/service/ReaderService.java index ffd426f..49a0a6c 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/service/ReaderService.java +++ b/src/main/java/com/grtsinry43/bookmanagement/service/ReaderService.java @@ -1,16 +1,71 @@ package com.grtsinry43.bookmanagement.service; import com.grtsinry43.bookmanagement.entity.Reader; -import com.baomidou.mybatisplus.extension.service.IService; +import com.grtsinry43.bookmanagement.vo.ReaderVO; // 导入ReaderVO + +import java.util.List; /** *

- * 服务类 + * 读者服务类接口 *

* * @author grtsinry43 * @since 2025-05-19 */ -public interface ReaderService extends IService { +public interface ReaderService { + /** + * 根据ID获取读者信息 (通常返回实体,Controller层转换为VO) + * @param readerId 读者ID + * @return 读者实体 + */ + Reader getReaderById(Integer readerId); + /** + * 根据用户名获取读者信息 (通常返回实体) + * @param username 用户名 + * @return 读者实体 + */ + Reader getReaderByUsername(String username); + + /** + * 获取所有读者列表 (通常返回实体列表,Controller层转换为VO列表) + * @return 读者实体列表 + */ + List getAllReaders(); + + /** + * 注册新读者 + * @param reader 读者实体 (密码应在服务层处理哈希) + */ + void registerReader(Reader reader); + + /** + * 更新用户管理员状态 (管理员操作) + * @param readerId 用户ID + * @param isAdmin 是否为管理员 + */ + void updateUserAdminStatus(Integer readerId, boolean isAdmin); + + /** + * 更新用户封禁状态 (管理员操作) + * @param readerId 用户ID + * @param isBanned 是否被封禁 + */ + void updateUserBanStatus(Integer readerId, boolean isBanned); + + /** + * 检查用户是否被封禁 (用于登录或权限校验) + * @param readerId 用户ID + * @return true 如果被封禁, false otherwise + */ + boolean isUserBanned(Integer readerId); // 参数类型改为Integer + + /** + * 用户登录 + * @param username 用户名 + * @param password 密码 + * @return 登录成功后的用户实体,如果登录失败则抛出 BusinessException + */ + Reader login(String username, String password); } diff --git a/src/main/java/com/grtsinry43/bookmanagement/service/impl/BookServiceImpl.java b/src/main/java/com/grtsinry43/bookmanagement/service/impl/BookServiceImpl.java index e3d62cc..cdcf759 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/service/impl/BookServiceImpl.java +++ b/src/main/java/com/grtsinry43/bookmanagement/service/impl/BookServiceImpl.java @@ -1,11 +1,14 @@ package com.grtsinry43.bookmanagement.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.grtsinry43.bookmanagement.entity.Book; import com.grtsinry43.bookmanagement.mapper.BookMapper; import com.grtsinry43.bookmanagement.service.BookService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 服务实现类 @@ -17,4 +20,46 @@ import org.springframework.stereotype.Service; @Service public class BookServiceImpl extends ServiceImpl implements BookService { + @Autowired + private BookMapper bookMapper; + + @Override + public Book getBookById(Integer bookId) { + return bookMapper.findById(bookId); + } + + @Override + public List getAllBooks() { + return bookMapper.findAll(); + } + + @Override + public List getBooksByTitle(String title) { + return bookMapper.findByTitle(title); + } + + @Override + public List getBooksByAuthor(String authorName) { + return bookMapper.findByAuthor(authorName); + } + + @Override + public List getBooksByPublisher(String publisherName) { + return bookMapper.findByPublisher(publisherName); + } + + @Override + public void addBook(Book book) { + bookMapper.insert(book); + } + + @Override + public void updateBook(Book book) { + bookMapper.update(book); + } + + @Override + public void deleteBook(Integer bookId) { + bookMapper.delete(bookId); + } } diff --git a/src/main/java/com/grtsinry43/bookmanagement/service/impl/OrdersServiceImpl.java b/src/main/java/com/grtsinry43/bookmanagement/service/impl/OrdersServiceImpl.java index fba753d..820755a 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/service/impl/OrdersServiceImpl.java +++ b/src/main/java/com/grtsinry43/bookmanagement/service/impl/OrdersServiceImpl.java @@ -1,10 +1,20 @@ package com.grtsinry43.bookmanagement.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.grtsinry43.bookmanagement.entity.Book; +import com.grtsinry43.bookmanagement.entity.OrderItem; import com.grtsinry43.bookmanagement.entity.Orders; +import com.grtsinry43.bookmanagement.mapper.BookMapper; +import com.grtsinry43.bookmanagement.mapper.OrderItemMapper; import com.grtsinry43.bookmanagement.mapper.OrdersMapper; import com.grtsinry43.bookmanagement.service.OrdersService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; /** *

@@ -15,6 +25,64 @@ import org.springframework.stereotype.Service; * @since 2025-05-19 */ @Service -public class OrdersServiceImpl extends ServiceImpl implements OrdersService { +public class OrdersServiceImpl extends ServiceImpl implements OrdersService { + @Autowired + private OrdersMapper ordersMapper; + + @Autowired + private OrderItemMapper orderItemMapper; + + @Autowired + private BookMapper bookMapper; // To update stock and get price + + @Override + public Orders getOrderById(Integer orderId) { + return ordersMapper.findById(orderId); + } + + @Override + public List getAllOrders() { + return ordersMapper.findAll(); + } + + @Override + public List getOrdersByReaderId(Integer readerId) { + return ordersMapper.findByReaderId(readerId); + } + + @Override + @Transactional // Ensure atomicity + public Orders createOrder(Orders order, List items) { + order.setOrderDate(LocalDateTime.now()); + order.setStatus("PENDING"); + + BigDecimal totalAmount = BigDecimal.ZERO; + for (OrderItem item : items) { + Book book = bookMapper.findById(item.getBookId()); + if (book == null || book.getStock() < item.getQuantity()) { + throw new RuntimeException("Book not found or insufficient stock for: " + (book != null ? book.getTitle() : item.getBookId())); + } + item.setUnitPrice(book.getPrice()); + totalAmount = totalAmount.add(book.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))); + } + order.setTotalAmount(totalAmount); + + ordersMapper.insert(order); + + for (OrderItem item : items) { + item.setOrderId(order.getOrderId()); + orderItemMapper.insert(item); + + Book book = bookMapper.findById(item.getBookId()); + book.setStock(book.getStock() - item.getQuantity()); + bookMapper.update(book); + } + return order; + } + + @Override + public void updateOrderStatus(Integer orderId, String status) { + ordersMapper.updateStatus(orderId, status); + } } diff --git a/src/main/java/com/grtsinry43/bookmanagement/service/impl/ReaderServiceImpl.java b/src/main/java/com/grtsinry43/bookmanagement/service/impl/ReaderServiceImpl.java index 908e8fa..197bac6 100644 --- a/src/main/java/com/grtsinry43/bookmanagement/service/impl/ReaderServiceImpl.java +++ b/src/main/java/com/grtsinry43/bookmanagement/service/impl/ReaderServiceImpl.java @@ -1,14 +1,20 @@ package com.grtsinry43.bookmanagement.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.grtsinry43.bookmanagement.common.BusinessException; +import com.grtsinry43.bookmanagement.common.ErrorCode; import com.grtsinry43.bookmanagement.entity.Reader; import com.grtsinry43.bookmanagement.mapper.ReaderMapper; import com.grtsinry43.bookmanagement.service.ReaderService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; +import java.util.List; + /** *

- * 服务实现类 + * 读者服务实现类 *

* * @author grtsinry43 @@ -17,4 +23,93 @@ import org.springframework.stereotype.Service; @Service public class ReaderServiceImpl extends ServiceImpl implements ReaderService { + private final ReaderMapper readerMapper; + private final BCryptPasswordEncoder passwordEncoder; + + @Autowired + public ReaderServiceImpl(ReaderMapper readerMapper) { + this.readerMapper = readerMapper; + this.passwordEncoder = new BCryptPasswordEncoder(); + } + + @Override + public Reader getReaderById(Integer readerId) { + if (readerId == null) { + return null; + } + return readerMapper.findById(readerId); + } + + @Override + public Reader getReaderByUsername(String username) { + if (username == null || username.trim().isEmpty()) { + return null; + } + return readerMapper.findByUsername(username); + } + + @Override + public List getAllReaders() { + return readerMapper.findAll(); + } + + @Override + public void registerReader(Reader reader) { + if (reader == null || reader.getUsername() == null || reader.getPassword() == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + if (readerMapper.findByUsername(reader.getUsername()) != null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + reader.setPassword(passwordEncoder.encode(reader.getPassword())); + readerMapper.insert(reader); + } + + @Override + public void updateUserAdminStatus(Integer readerId, boolean isAdmin) { + Reader reader = readerMapper.findById(readerId); + if (reader == null) { + throw new BusinessException(ErrorCode.NOT_FOUND); + } + readerMapper.updateReaderAdminStatus(readerId, isAdmin); + } + + @Override + public void updateUserBanStatus(Integer readerId, boolean isBanned) { + Reader reader = readerMapper.findById(readerId); + if (reader == null) { + throw new BusinessException(ErrorCode.NOT_FOUND); + } + readerMapper.updateReaderBanStatus(readerId, isBanned); + } + + @Override + public boolean isUserBanned(Integer readerId) { + if (readerId == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Reader reader = readerMapper.findById(readerId); + if (reader == null) { + throw new BusinessException(ErrorCode.NOT_FOUND); + } + return reader.getIsBanned() != null && reader.getIsBanned(); + } + + @Override + public Reader login(String username, String password) { + if (username == null || username.trim().isEmpty() || password == null || password.isEmpty()) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Reader reader = readerMapper.findByUsername(username); + if (reader == null) { + throw new BusinessException(ErrorCode.NOT_FOUND); + } + if (!passwordEncoder.matches(password, reader.getPassword())) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + if (reader.getIsBanned() != null && reader.getIsBanned()) { + throw new BusinessException(ErrorCode.UNAUTHORIZED); + } + return reader; + } } diff --git a/src/main/java/com/grtsinry43/bookmanagement/util/JwtUtil.java b/src/main/java/com/grtsinry43/bookmanagement/util/JwtUtil.java new file mode 100644 index 0000000..311223c --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/util/JwtUtil.java @@ -0,0 +1,69 @@ +package com.grtsinry43.bookmanagement.util; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.JWTVerifier; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * @author grtsinry43 + * @date 2024/8/11 21:23 + * @description 少年负壮气,奋烈自有时! + */ +@Slf4j +@Component +public class JwtUtil { + + private static String SECRET_KEY; + + @Value("${com.grtsinry43.secret_key}") + public void setSecretKey(String secretKey) { + SECRET_KEY = secretKey; + } + + public static final long EXPIRATION_TIME = 86400000; // 1 day + public static final long REFRESH_EXPIRATION_TIME = 2592000000L; // 30 days + + public static String generateToken(String userid) { + log.info(SECRET_KEY); + Algorithm algorithm = Algorithm.HMAC512(SECRET_KEY); + return JWT.create() + .withSubject(userid) + .withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) + .sign(algorithm); + } + + public static String generateRefreshToken(String userid) { + Algorithm algorithm = Algorithm.HMAC512(SECRET_KEY); + return JWT.create() + .withSubject(userid) + .withExpiresAt(new Date(System.currentTimeMillis() + REFRESH_EXPIRATION_TIME)) + .sign(algorithm); + } + + public static DecodedJWT getDecodedJWT(String token) { + try { + log.info("Decoding token: {}", token); + Algorithm algorithm = Algorithm.HMAC512(SECRET_KEY); + JWTVerifier verifier = JWT.require(algorithm).build(); + return verifier.verify(token); + } catch (JWTDecodeException e) { + log.error("Invalid token: {}", token, e); + throw e; + } + } + + public static boolean isTokenExpired(String token) { + return getDecodedJWT(token).getExpiresAt().before(new Date()); + } + + public static String getUserFromToken(String token) { + return getDecodedJWT(token).getSubject(); + } +} \ No newline at end of file diff --git a/src/main/java/com/grtsinry43/bookmanagement/vo/ReaderVO.java b/src/main/java/com/grtsinry43/bookmanagement/vo/ReaderVO.java new file mode 100644 index 0000000..eabf099 --- /dev/null +++ b/src/main/java/com/grtsinry43/bookmanagement/vo/ReaderVO.java @@ -0,0 +1,78 @@ +package com.grtsinry43.bookmanagement.vo; + +import java.io.Serializable; + +/** + * 读者视图对象 (安全) + */ +public class ReaderVO implements Serializable { + private Integer readerId; + private String username; + private String email; + private String phone; + private Boolean isAdmin; + private Boolean isBanned; // 添加是否被封禁字段 + + private static final long serialVersionUID = 1L; + + // 构造函数、Getters 和 Setters + public ReaderVO() { + } + + public ReaderVO(Integer readerId, String username, String email, String phone, Boolean isAdmin, Boolean isBanned) { + this.readerId = readerId; + this.username = username; + this.email = email; + this.phone = phone; + this.isAdmin = isAdmin; + this.isBanned = isBanned; + } + + public Integer getReaderId() { + return readerId; + } + + public void setReaderId(Integer readerId) { + this.readerId = readerId; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public Boolean getIsAdmin() { + return isAdmin; + } + + public void setIsAdmin(Boolean admin) { + isAdmin = admin; + } + + public Boolean getIsBanned() { + return isBanned; + } + + public void setIsBanned(Boolean banned) { + isBanned = banned; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 777d7bc..7cc618e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,4 +6,8 @@ spring.datasource.driver-class-name=org.postgresql.Driver # log file configuration logging.config=classpath:logback-spring.xml server.shutdown=graceful -server.port=8080 \ No newline at end of file +server.port=8080 + +mybatis.type-aliases-package=com.grtsinry43.bookmanagement.entity +mybatis.configuration.map-underscore-to-camel-case=true +logging.level.com.grtsinry43.bookmanagement.mapper=DEBUG diff --git a/src/main/resources/xml/AuthorMapper.xml b/src/main/resources/mapper/AuthorMapper.xml similarity index 100% rename from src/main/resources/xml/AuthorMapper.xml rename to src/main/resources/mapper/AuthorMapper.xml diff --git a/src/main/resources/xml/BookAuthorMapper.xml b/src/main/resources/mapper/BookAuthorMapper.xml similarity index 100% rename from src/main/resources/xml/BookAuthorMapper.xml rename to src/main/resources/mapper/BookAuthorMapper.xml diff --git a/src/main/resources/mapper/BookMapper.xml b/src/main/resources/mapper/BookMapper.xml new file mode 100644 index 0000000..4f4f6b1 --- /dev/null +++ b/src/main/resources/mapper/BookMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + INSERT INTO book (title, isbn, price, stock, publish_date, publisher_id) + VALUES (#{title}, #{isbn}, #{price}, #{stock}, #{publishDate}, #{publisherId}) + + + + UPDATE book + SET title = #{title}, + isbn = #{isbn}, + price = #{price}, + stock = #{stock}, + publish_date = #{publishDate}, + publisher_id = #{publisherId} + WHERE book_id = #{bookId} + + + + DELETE FROM book WHERE book_id = #{bookId} + + diff --git a/src/main/resources/mapper/OrderItemMapper.xml b/src/main/resources/mapper/OrderItemMapper.xml new file mode 100644 index 0000000..f31fd67 --- /dev/null +++ b/src/main/resources/mapper/OrderItemMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + INSERT INTO order_item (order_id, book_id, quantity, unit_price) + VALUES (#{orderId}, #{bookId}, #{quantity}, #{unitPrice}) + + + + + + diff --git a/src/main/resources/mapper/OrdersMapper.xml b/src/main/resources/mapper/OrdersMapper.xml new file mode 100644 index 0000000..846ed60 --- /dev/null +++ b/src/main/resources/mapper/OrdersMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + INSERT INTO orders (reader_id, order_date, total_amount, status) + VALUES (#{readerId}, #{orderDate}, #{totalAmount}, #{status}) + + + + UPDATE orders SET status = #{status} WHERE order_id = #{orderId} + + + diff --git a/src/main/resources/xml/PublisherMapper.xml b/src/main/resources/mapper/PublisherMapper.xml similarity index 100% rename from src/main/resources/xml/PublisherMapper.xml rename to src/main/resources/mapper/PublisherMapper.xml diff --git a/src/main/resources/mapper/ReaderMapper.xml b/src/main/resources/mapper/ReaderMapper.xml new file mode 100644 index 0000000..b171eec --- /dev/null +++ b/src/main/resources/mapper/ReaderMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + INSERT INTO reader (username, password, email, phone, is_admin, is_banned) + VALUES (#{username}, #{password}, #{email}, #{phone}, #{isAdmin,jdbcType=BOOLEAN}, #{isBanned,jdbcType=BOOLEAN}) + + + + UPDATE reader SET is_admin = #{isAdmin} WHERE reader_id = #{readerId} + + + + UPDATE reader SET is_banned = #{isBanned} WHERE reader_id = #{readerId} + + + diff --git a/src/main/resources/sql/init.sql b/src/main/resources/sql/init.sql index afd23b3..a54144d 100644 --- a/src/main/resources/sql/init.sql +++ b/src/main/resources/sql/init.sql @@ -47,6 +47,8 @@ CREATE TABLE reader username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, + is_admin BOOLEAN NOT NULL DEFAULT FALSE, + is_banned BOOLEAN NOT NULL DEFAULT FALSE, phone VARCHAR(20) ); diff --git a/src/main/resources/xml/BookMapper.xml b/src/main/resources/xml/BookMapper.xml deleted file mode 100644 index fbfd369..0000000 --- a/src/main/resources/xml/BookMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/main/resources/xml/OrderItemMapper.xml b/src/main/resources/xml/OrderItemMapper.xml deleted file mode 100644 index a9598b7..0000000 --- a/src/main/resources/xml/OrderItemMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/main/resources/xml/OrdersMapper.xml b/src/main/resources/xml/OrdersMapper.xml deleted file mode 100644 index dc3a419..0000000 --- a/src/main/resources/xml/OrdersMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/main/resources/xml/ReaderMapper.xml b/src/main/resources/xml/ReaderMapper.xml deleted file mode 100644 index ff46760..0000000 --- a/src/main/resources/xml/ReaderMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - -