如何为 micronaut 中的所有控制器设置基本 url?通过 application.yml 或任何配置

问题描述 投票:0回答:3

如何为所有控制器设置基本 URL

 @Controller("/api/hello")
class HelloController{

    @Get("/greet")
   fun greet(){

   }
}

有一种方法可以将其写为所有其余控制器端点的配置中的基本 url,而不是在每个控制器上编写 /api

kotlin jvm micronaut
3个回答
4
投票

可以配置一次RouteBuilder.UriNamingStrategy(默认实现HyphenatedUriNamingStrategy

  1. 添加一些自定义属性micronaut.context-path
    application.yml
micronaut:
  context-path: /someApiPath
  1. 创建
    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(){

   }
}

0
投票

目前没有现成的此类功能 必须在 application.yml 中指定自定义属性并从控制器引用它们

例如:

@Controller(“${my.config:/api}/foo”))

0
投票

现在我们可以使用

micronaut.server.context-path

例如,

micronaut.server.context-path=/api/v1

在application.propeties文件或yml文件中。然后我们可以通过以下方式访问API,

http://localhost:51711/api/v1/example
© www.soinside.com 2019 - 2024. All rights reserved.