API中的接口
controller中实现的接口方法
问题:新框架部署后,原来旧框架能访问成功的接口报参数不匹配错误。
现象:旧框架中,无法继承参数的注解,会以controller中定义的参数名为准。
新框架中,API接口的参数注解继承生效,如果子类没有重写的话,会以接口中的参数注解为准。
spring-webX部分堆栈信息如下:
javlanException:打印堆栈信息
atorspringframeworcorMethodParameter.getParameterAnnotations(MethodParameter.java:63~[spring-core-jar:7]
atorspringframeworwemethoHandlerMethod$HandlerMethodParameter.getParameterAnnotations(HandlerMethojava:50~[spring-web-jar:7]
atorspringframeworcorMethodParameter.getParameterAnnotation(MethodParameter.java:66~[spring-core-jar:7]
atorspringframeworcorMethodParameter.hasParameterAnnotation(MethodParameter.java:68~[spring-core-jar:7]
atorspringframeworwemethoannotatioModelFactory.findSessionAttributeArguments(ModelFactory.java:18~[spring-web-jar:7]
atorspringframeworwemethoannotatioModelFactory.initModel(ModelFactory.java:11~[spring-web-jar:7]
atorspringframeworweservlet.mvmethoannotatioRequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:87~[spring-webmvc-jar:7]
atorspringframeworweservlet.mvmethoannotatioRequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:80~[spring-webmvc-jar:7]
atorspringframeworweservlet.mvmethoAbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:8~[spring-webmvc-jar:7]
atorspringframeworweservlet.DispatcherServlet.doDispatch(DispatcherServlet.java:106~[spring-webmvc-jar:7]
atorspringframeworweservlet.DispatcherServlet.doService(DispatcherServlet.java:96~[spring-webmvc-jar:7]
atorspringframeworweservlet.FrameworkServlet.processRequest(FrameworkServlet.java:100~[spring-webmvc-jar:7]
atorspringframeworweservlet.FrameworkServlet.doGet(FrameworkServlet.java:89~[spring-webmvc-jar:7]
atjavax.servlet.http.HttpServlet.service(HttpServlet.java:64~[javax.servlet-api-0.jar:0.1]
atorspringframeworweservlet.FrameworkServlet.service(FrameworkServlet.java:88~[spring-webmvc-jar:7]
atjavax.servlet.http.HttpServlet.service(HttpServlet.java:750)~[javax.servlet-api-0.jar:0.1]
atorapachcatalincorApplicationFilterChaiinternalDoFilter(ApplicationFilterChaijava:22~[tomcat-embed-core-0.4jar:0.46]
atorapachcatalincorApplicationFilterChaidoFilter(ApplicationFilterChaijava:16~[tomcat-embed-core-0.4jar:0.46]
atorapachtomcat.websocket.server.WsFilter.doFilter(WsFilter.java:5~[tomcat-embed-websocket-0.4jar:0.46]
atorapachcatalincorApplicationFilterChaiinternalDoFilter(ApplicationFilterChaijava:18~[tomcat-embed-core-0.4jar:0.46]
atorapachcatalincorApplicationFilterChaidoFilter(ApplicationFilterChaijava:16~[tomcat-embed-core-0.4jar:0.46]
atorspringframeworsecurity.weFilterChainProxy$VirtualFilterChaidoFilter(FilterChainProxy.java:32~[spring-security-web-jar:6]
原因分析:
在spring-webX中重写了内部类的方法,用于获取接口中的参数注解,并进行合并,controller类中实现API接口时,默认获取接口中的参数注解,并按注解中的配置进行拦截和参数转换。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点