Почему не работает аннотация для Spring MVC?

201
18 апреля 2018, 08:58

При написании REST API на Spring Boot решил порпробовать для всех path сделать префикс /rest при помощи аннотации, но почему-то не работает, причем старый url теперь тоже не отвечает, значит аннотация все-таки влияет но что-то идет не так. Помогите пожалуйста это исправить, и скажите в чем моя ошибка.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@RestController
@RequestMapping("/rest")
public @interface RestApi {
}
@Configuration
public class ApiConfig {
    @Bean
    public WebMvcRegistrationsAdapter webMvcRegistrationsHandlerMapping() {
        return new WebMvcRegistrationsAdapter() {
            @Override
            public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
                return new RequestMappingHandlerMapping() {
                    private final static String API_BASE_PATH = "/rest";
                    @Override
                    protected void registerHandlerMethod(Object handler, Method method, RequestMappingInfo mapping) {
                        Class<?> beanType = method.getDeclaringClass();
                        if (AnnotationUtils.findAnnotation(beanType, RestApi.class) != null) {
                            PatternsRequestCondition apiPattern = new PatternsRequestCondition(API_BASE_PATH)
                                    .combine(mapping.getPatternsCondition());
                            mapping = new RequestMappingInfo(mapping.getName(), apiPattern,
                                    mapping.getMethodsCondition(), mapping.getParamsCondition(),
                                    mapping.getHeadersCondition(), mapping.getConsumesCondition(),
                                    mapping.getProducesCondition(), mapping.getCustomCondition());
                        }
                        super.registerHandlerMethod(handler, method, mapping);
                    }
                };
            }
        };
    }
}
Answer 1

Вашей аннотации RestApi достаточно. Если её вешать над контроллерами вот так:

@RestApi
public class FooController {
    @RequestMapping("/foo")
    @ResponseBody
    String get() {
        return "OK";
    }
}

Если порт на котором развёртывается ваше приложение 8080 то при обращении на http://localhost:8080/rest/foo должно вернуться OK.

Не понятно зачем вам нужен ApiConfig. Скорее всего проблема в нём.

Ещё совет: при запуске приложения в логах можно попробовать посмотреть пути на которые вешаются ваши контроллеры.

READ ALSO
Deserialize LocalDate

Deserialize LocalDate

Всем привет! Есть Restful вебсервис написанный с Spring Boot, который отдает entity с полем LocalDate с контроллераИ есть клиент для него на Андроиде, но проблема...

517
Не могу подключится к SQL SERVER 2012 java

Не могу подключится к SQL SERVER 2012 java

Пытаюсь подключится к удаленной базе данных на сервереВыдает ошибку:

184
Как передать массив в виде аргумента в OpenCL

Как передать массив в виде аргумента в OpenCL

Вопрос: как можно в jocl предать массив в виде аргумента?

154
Как заменить Глиф (Glyph) одного символа на глиф другого символа для шрифтов типа otf

Как заменить Глиф (Glyph) одного символа на глиф другого символа для шрифтов типа otf

Нужно заменить поменять местами глиф символа А и БЧто бы когда вводился символ А выводился символ Б и наоборот

210