Пользовательская анотация для ApiController для префикса / api не работает Spring Boot - PullRequest
0 голосов
/ 28 марта 2020

Я определил ApiController для добавления префикса (/ api) для сопоставления маршрута. Я использую Spring Boot

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@RestController
@RequestMapping("/api")
public @interface ApiController {

    @AliasFor(annotation = RequestMapping.class, attribute = "value")
    String[] value();

}

и использую в контроллере как

@ApiController("/user")
public class UserController {

    /**
     * Define url methods
     *
     */
}

, но я не знаю, почему / api / user / не обслуживает. он обслуживает в / user / Endpoint. Кто-нибудь может знать точную ошибку?

Ответы [ 2 ]

1 голос
/ 28 марта 2020

Когда вы используете @AliasFor, это означает, что свойство вашей аннотации является псевдонимом для свойства из другой аннотации. В вашем примере ApiController.value является псевдонимом для RequestMapping.value, а когда вы устанавливаете ApiController.value, то же значение устанавливается на RequestMapping.value. Не добавляя и не объединяя, просто установите новое значение. Вы можете прочитать, как @AliasFor работает здесь

Как насчет вашей проблемы. Как я понимаю, вы хотите установить api root url. Вы можете сделать это одним из способов на этот вопрос . Обратите внимание, что в Вариант 2 используется та же техника c, но не используется @AliasFor для переопределения / расширения RequestMapping.value.

0 голосов
/ 29 марта 2020

Ниже я объясню, как решить проблему после проверки реализации @ RestController.

Я создаю псевдоним для RestController как

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RestController
public @interface ApiController {

    @AliasFor(
            annotation = RestController.class
    )
    String value() default "";
}

, а затем создаю конфигурацию для добавьте префикс.

@Configuration
public class Config implements WebMvcConfigurer {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.addPathPrefix("/api", HandlerTypePredicate.forAnnotation(ApiController.class));
    }
}

и его работы для меня.

...