Spring Boot 是否可以使用接口作为控制器参数,并让 spring 使用它的实现来实例化它?


@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

相关内容

  • 没有找到相关文章

最新更新