如何为所有控制器设置基本 URL
@Controller("/api/hello")
class HelloController{
@Get("/greet")
fun greet(){
}
}
有一种方法可以将其写为所有其余控制器端点的配置中的基本 url,而不是在每个控制器上编写 /api
可以配置一次RouteBuilder.UriNamingStrategy(默认实现HyphenatedUriNamingStrategy)
application.yml
:micronaut:
context-path: /someApiPath
ConfigurableUriNamingStrategy
并扩展 HyphenatedUriNamingStrategy
:@Singleton
@Replaces(HyphenatedUriNamingStrategy::class)
class ConfigurableUriNamingStrategy : HyphenatedUriNamingStrategy() {
@Value("\${micronaut.context-path}")
var contextPath: String? = null
override fun resolveUri(type: Class<*>?): String {
return contextPath ?: "" + super.resolveUri(type)
}
override fun resolveUri(beanDefinition: BeanDefinition<*>?): String {
return contextPath ?: "" + super.resolveUri(beanDefinition)
}
override fun resolveUri(property: String?): String {
return contextPath ?: "" + super.resolveUri(property)
}
override fun resolveUri(type: Class<*>?, id: PropertyConvention?): String {
return contextPath ?: "" + super.resolveUri(type, id)
}
}
此配置将应用于所有控制器, 对于您的
HelloController
URI 路径将为 /someApiPath/greet
,如果缺少属性 micronaut.context-path
,则 /greet
:
@Controller
class HelloController {
@Get("/greet")
fun greet(){
}
}
目前没有现成的此类功能 必须在 application.yml 中指定自定义属性并从控制器引用它们
例如:
@Controller(“${my.config:/api}/foo”))
现在我们可以使用
micronaut.server.context-path
。
例如,
micronaut.server.context-path=/api/v1
在application.propeties文件或yml文件中。然后我们可以通过以下方式访问API,
http://localhost:51711/api/v1/example