关于Spring中Controller的继承问题

2 篇文章 0 订阅
1 篇文章 0 订阅
本文探讨了在Spring MVC中,子类Controller如何继承父类的URL以及重写方法的情况。通过一个Demo展示,当子类继承父类Controller并重写方法时,可以通过前缀区分不同的URL。若子类不重写方法,请求将默认调用父类的方法。结论是,子类可以只通过前缀区分URL,并且重写方法时URL可以省略。
摘要由CSDN通过智能技术生成


场景

  • 今天在写垃圾代码的时候,发现公司的代码有一个baseController,还是个抽象类,还有很多baseController的具体子类,对baseController中的抽象方法进行重写覆盖,那么心中有个疑问,子类和父类的url是通过什么进行区分的??子类可不可以继承父类方法的url?作为一个实习生,初来乍到,心中充满好奇,写了个demo尝试一下。

demo

  • 先写一个父类controller
@RestController
public class BaseController {
    @GetMapping("/del")
    public String base(){
        return "base";
    }
}
  • 再写一个子类继承baseController
@RestController
@RequestMapping("/pre")
public class WangController extends BaseController {
    @Override
    @GetMapping("/del")
    public String base() {
        return "wang";
    }
}

结果如下:

  • 输入/pre/del的时候会来到子类的controller
    在这里插入图片描述

  • 输入/del 不带前缀的时候会来到父类的controller在这里插入图片描述


子类重写方法能否继承父类的url

  • 我们来看看:如果子类具体方法不带url,只加前缀,能否进行区分?
    如果父类还是不变,但是子类像下面这样写↓
@RestController
@RequestMapping("/pre")
public class WangController extends BaseController {
    @Override       不写方法具体的url,看看能否请求通
    public String base() {
        return "wang";
    }
}

结果如下:
在这里插入图片描述
下面再来点骚操作~


如果子类继承了父类,但是没有重写该方法,会发生什么?

  • 父类依旧是:
@RestController
public class BaseController {
    @GetMapping("/del")
    public String base(){
        return "base";
    }
}
  • 这次子类并备有重写base方法
@RestController
@RequestMapping("/pre")
public class WangController extends BaseController {
}

那么当我们发送请求的时候:不管是加了前缀的/pre/del 还是不加前缀的/del,都会返回base!
在这里插入图片描述原理就是:因为继承是可以继承到父类方法上的@GetMapping的,子类继承了方法,但是并没有进行重写,那么如果加了前缀发送请求的话,肯定是默认调用父类的方法来实现。

  • 这就是我遇到的问题。。【这就是为什么我想要发送请求给子类,但是子类中并没有该url方法,debug发现,请求发到父类的url上了,但是父类的controller并没有前缀~

结论

  • 子类controller继承父类controller具体方法的时候,可以只通过前缀进行区分url
  • 并且子类重写的父类的方法,如果url不改变,那么子类方法上的url可以不写(不写@GetMapping之类的…)
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值