Как установить базовый URL для всех контроллеров в микроавтобусе? через application.yml или любую конфигурацию - PullRequest
0 голосов
/ 26 июня 2019

Как установить базовый URL для всех контроллеров

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

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

   }
}

Вместо записи / api на каждом контроллере есть способ записать его как базовый URL в конфигурации для всех конечных точек остальных контроллеров

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Вы можете настроить один раз 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 голосов
/ 26 июня 2019

Никакая такая функция не доступна с полки, в данный момент необходимо указать пользовательские свойства в application.yml и ссылаться на них из контроллера

например:

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