Конечная точка контроллера остальной загрузки - PullRequest
0 голосов
/ 15 марта 2020

Создание простого Spring Boot приложения с использованием Maven. Я дал значение с пометкой RestController, но оно не работает. Если я не использую значение RestController, это работает. Я хочу знать, почему это не работает, и как использовать значение в @RestController?

http://localhost:9090/app/hello это дает ошибку

http://localhost:9090/hello это прекрасно работает

@RestController("/app") Для чего нужно "/app" это значение внутри @RestController аннотации?

PS: я знаю, что могу использовать @RequestMapping("/app") в классе ScraperResource.

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}
@RestController("/app")
public class ScraperResource {
    @GetMapping("hello")
    public String testController() {
        return "Hello";
    }
}

application.properties

server.port=9090

Ответы [ 2 ]

3 голосов
/ 15 марта 2020

Это потому, что "/ app" внутри вашего RestController не имеет никакого отношения к вашему URL-отображению , а скорее к имени "логического компонента" , которое используется внутри Spring.

Вы должны сделать это вместо этого, если хотите префиксировать все методы вашего контроллера с / app (или просто не указывать).

@RestController
@RequestMapping("/app")
public class ScraperResource {

    @GetMapping("hello")
    public String testController() {
        return "Hello";
    }
}

Без @RestController Spring не будет знать, что это класс должен обрабатывать HTTP-вызовы, поэтому это необходимая аннотация.

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

Согласно Java Do c, связанному с аннотацией @RestController, это значение значения, которое вы ему передаете:

/**
     * The value may indicate a suggestion for a logical component name,
     * to be turned into a Spring bean in case of an autodetected component.
     * @return the suggested component name, if any (or empty String otherwise)
     * @since 4.0.1
     */
    @AliasFor(annotation = Controller.class)
    String value() default "";

Как таковое, оно не влиять или влиять на то, с какого URL ваша конечная точка доступна. Если вы хотите добавить отображение верхнего уровня, вы можете использовать @RequestMapping("/app") на уровне класса, как вы упомянули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...