关于继承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";
}
}
效果:
补充:若不希望对方法进行重写,在访问接口时想要提前触发一些方法可使用拦截器。