@RestController
@RequestMapping("/api/test")
class TestController {
@GetMapping
fun findSomething(params: MyInterface) {
when (params) {
is FirstImplementation -> doSomeThing()
is SecondImplementation -> doSomeThing()
}
}
}
sealed interface MyInterface
class FirstImplementation(
val a: String,
val b: Int,
) : MyInterface
class SecondImplementation(
val b: Int,
val c: String,
) : MyInterface
我尝试过这样做,但是我得到了一个自动生成的接口的aop代理,所以失败了当表达式。
通常,在Spring MVC中定义控制器时,我们会用各种指定请求的注释来修饰它的方法:端点的URL、HTTP请求方法、路径变量等等。
如果我们给控制器添加web请求注解,它们将优先于接口的注解。换句话说,Spring解释控制器接口的方式类似于Java处理继承的方式。
更多信息请参考这篇博客文章https://www.baeldung.com/spring-interface-driven-controllers