java controller 继承_java – Spring RestController中的继承
我有一个Spring RestController,它处理API调用的第1版.
package rest.v1;
@RestController
@RequestMapping("v1/someResource")
public class Controller_V1 {
@RequestMapping(value = "/{resourceName}", method = RequestMethod.GET)
public Object retrieve() throws Exception {
....
}
}
我想要做的是创建另一个处理版本2请求的控制器.同时我想继承已经在版本1控制器中的实现.这是因为从v1到v2不变的实现将仅从v1继承.
所以像这样:
package rest.v2;
@RestController("controllerV2")
@RequestMapping("v2/someResource")
public class Controller_v2 extends Controller_v1 {
@RequestMapping(value = "/{resourceName}", method = RequestMethod.GET)
public Object retrieve() throws Exception {
//implementation overridden from v1
}
}
这样做会导致ConflictingBeanDefinitionException.我也不确定是否应该像上面那样扩展控制器.
我知道我可以在同一个控制器的RequestMapping中使用多个路径,如下所示:
@RestController
@RequestMapping(value = { "v1/someResource", "v1/someResource" })
public class Controller_V1 {
}
但上述情况对我的情况不起作用.
以下是控制器扩展时的堆栈跟踪:
[java] org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [rest-context.xml]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'controller_V1' for bean class [rest.v2.Controller_V2] conflicts with existing, non-compatible bean definition of same name and class [rest.v1.Controller_V1]
[java] at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:413)
[java] at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335)
[java] at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
[java] at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
[java] at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
[java] at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187)
[java] at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
[java] at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
[java] at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
[java] at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:540)
[java] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454)
[java] at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
[java] at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
[java] at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
[java] at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
[java] at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
[java] at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
[java] at javax.servlet.GenericServlet.init(GenericServlet.java:158)
解决方法:
堆栈跟踪的第一行显然存在问题:
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [rest-context.xml]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘controller_V1’ for bean class [rest.v2.Controller_V2] conflicts with existing, non-compatible bean definition of same name and class [rest.v1.Controller_V1]
这是因为你让Spring为你的bean命名.默认情况下,Spring将使用bean名称作为camelCase中当前类的接口名称或超类.
所以,你有这样的东西(Spring给出的名字):
@RestController("controller_V1") //
@RequestMapping("v1/someResource")
public class Controller_V1
@RestController("controller_V1") //
@RequestMapping("v2/someResource")
public class Controller_V2 extends Controller_V1
如您所见,您只需要重命名第二个bean:
@RestController("controller_V2")
@RequestMapping("v2/someResource")
public class Controller_V2 extends Controller_V1
IMO你应该为你的班级使用更好的名字.
标签:java,rest,spring
来源: https://codeday.me/bug/20190609/1202921.html
java controller 继承_java – Spring RestController中的继承相关推荐
- java 从一个容器获取对象,Java 如何实现从spring容器中获取注入的bean对象
Java 如何实现从spring容器中获取注入的bean对象 发布时间:2020-11-03 15:27:37 来源:亿速云 阅读:70 作者:Leah 这期内容当中小编将会给大家带来有关Java 如 ...
- java 代码通用结构_java spring代码通用结构-java
src.main. java.com.company.projectname | - aop:类组.Spring AOP的Aspect仓库,是AOP的相关内容.定义了AOP切面类与织入方法.涉及@As ...
- Java笔记-Log4j在Spring Boot中的使用
在Java企业级开发中都需要日志记录相关的操作. Maven相关配置如下,首先要去除Spring Boot自带的日志,然后添加log4j2的日志: <dependency><grou ...
- java调用r实例,Spring Boot中使用RSocket的示例代码
1. 概述 RSocket 应用层协议支持Reactive Streams 语义, 例如:用RSocket作为HTTP的一种替代方案.在本教程中, 我们将看到RSocket 用在spring boot ...
- java为什么不能多继承_java为什么不支持多继承
概述 多重继承是面向对象概念的一个特性,其中一个类可以继承多个父类的属性.当超类和子类中都存在具有相同签名的方法时,就会出现问题.在调用该方法时,编译器无法确定要调用哪个类方法,甚至在调用哪个类方法时 ...
- java 嵌套排序_java – Spring数据:按嵌套属性排序
我正在使用Spring Data中的JpaRepository和JpaSpecificationExecutor,我有一个问题是对方法findAll(规范,可分页,排序)进行排序 我想通过主repo类 ...
- java 封装 英文_java类的封装、继承、多态
一.封装(encapsulation) 封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系.封装的特 ...
- java @around_正确理解Spring AOP中的Around advice
Spring AOP中,有Before advice和After advice,这两个advice从字面上就可以很容易理解,但是Around advice就有点麻烦了. 乍一看好像是Before ad ...
- java SE 费用_Java SE 6中的垃圾回收器G1收费是虚惊一场
[51CTO快译]在Sun宣布Java SE 6 update 14版本中的垃圾回收器G1将收费之后,引起了Java社区相当大的反响.之后不久的6月5日,有一个细心的匿名读者发表了这样一个帖子: &q ...
最新文章
- 有没有记录程序运行中所有的函数调用堆栈的工具?
- JavaScript跨域方法
- Port Forwarding Port Triggering
- 450. 删除二叉搜索树中的节点
- python调用ipython_在IPython中执行Python程序文件的示例
- Kibana停止kibana的方法命令:找到5601端口对应的进程ID 把此进程进行kill即可
- Oracle入门(八)之权限
- java线程6种状态转换,Java线程的生命周期和各种状态转换详解
- 内网穿透从搭建到溯源(内网隧道搭建、绕过、隧道流量分析、日志分析、隧道防护)
- 美团点评架构再调整,王兴凭什么同时杠上阿里滴滴饿了么
- springBoot整合Dubbo使用与采坑
- 我滴个乖乖,一万三千颗卫星那
- 关于TOGAF认证考试
- 浅谈 Android Dex 文件
- 阿里云ace考试有什么用?想要通过需要掌握哪些方面知识?
- vue 富文本编辑器提取纯文字
- 通过 BTC 联动程度判断牛熊
- 常见的HTML标签,让你的网页更加精彩
- 关于5G通信技术,你了解多少?
- python爬虫 豆瓣电影
热门文章
- Great Cow BASIC (大母牛BASIC)一个开源的8位芯片PIC和Atmel AVR微控制器的BASIC编译器
- 大数据 memcache缓存序列化太慢策略
- MrDoc的excel文件导入(Luckysheet)空白行问题问题
- ManytoMany字段增删改查Django
- 计算机能识别用户的物理身份,(完整版)劳顿管理信息系统习题集-第8章信息系统安全...
- springboot整合freemarker出现空指针异常的解决办法
- IDEA完成登录servlet功能(连接云数据库)
- 纪念我的iriver T7
- 高层次人才需求旺盛!2022年中国大数据产业发展趋势
- PHP火车购票系统,PHPC6051 火车售票系统