关于继承Controller测试
首先创建一个Controller
@RestController
@RequestMapping(value="ceshi")
public class CeshiController {
    @GetMapping(value = "ceshi")
    public String ceshi() {
        return "测试";
    }
}
 
创建一个Controller继承上一个Controller
@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
}
 
1.访问/to/ceshi/ceshi接口,得到返回值测试。
效果:
 
2.修改继承Controller如下(重写ceshi方法,但不修改Mapping注解)
@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
    public String ceshi() {
        return "测试11";
    }
}
 
效果:
 
3.修改继承Controller如下(重写ceshi方法,修改Mapping注解)
@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
    @GetMapping(value = "ceshi11")
    public String ceshi() {
        return "测试11";
    }
}
 
效果:
 访问/to/ceshi/ceshi时报404
 
 访问/to/ceshi/ceshi11时得到重写后返回值
 
4.修改继承Controller如下(不修改Mapping注解,把Mapping注解的方法改个名)
@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
    @GetMapping(value = "ceshi")
    public String ceshi11() {
        return "测试11";
    }
}
 
效果:无法启动项目
 
关于继承Controller切面触发测试
创建一个切面,将继承Controller所有方法设置为切点
@Aspect
@Component
public class CeshiAspect {
    @Pointcut("execution(* ceshi.Controller.Ceshi2Controller.*(..))")
    public void demo() {}
    @Before("demo()")
    public void before(JoinPoint joinPoint){
        System.out.println("--------触发前置通知---------");
    }
}
 
1.测试未重写方法(不触发切面)
@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
}
 
效果:
 
2.测试重写方法
@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
    public String ceshi() {
        return "测试11";
    }
}
 
效果:

 
3.测试新增独有方法
@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
    @GetMapping(value = "ceshi222")
    public String ceshi() {
        return "测试222";
    }
}
 
效果:
 
 
补充:若不希望对方法进行重写,在访问接口时想要提前触发一些方法可使用拦截器。



















