Почему приложение Spring WebFlux не учитывает префикс отображения @RestController? - PullRequest
0 голосов
/ 28 октября 2019

Я заметил в своем приложении Spring Boot WebFlux, что отображение отличается от MVC.

В MVC я мог бы добавить RestController("/prefix"), чтобы все мои методы имели префикс /prefix,Но в WebFlux это не работает.

Это сделано специально?
Примечание. Я поменял тип возвращаемого значения Mono<>, чтобы увидеть, имеет ли это значение, на случай, если здесь будет проведен какой-то другой самоанализ.

Например, это контроллер -

@RestController("/api/user")
public class UserController {

    private UserService service;

    public UserController(UserService service) {
        this.service = service;
    }

    @GetMapping("/me")
    public Map<String, Object> whoami(@AuthenticationPrincipal OAuth2User oauth2User) {
        HashMap<String, Object> response = new HashMap<>();
        if (null != oauth2User) {
            response.put("userName", oauth2User.getName());
            response.put("userAttributes", oauth2User.getAttributes());
            return response;
        } else {
            response.put("userName", "anonymous");
            return response;
        }
    }
...

И отображение не найдено там, где я ожидал. enter image description here

Хотя, он найден здесь - enter image description here

Я думаю, что комментарий о зависимостях правильный - Один из них тянетконфликт.

dependencies {
    implementation project(":shared:domain")
    implementation 'org.springframework.cloud:spring-cloud-starter-gateway',
        'org.springframework.cloud:spring-cloud-starter-security',
        'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client',
        'org.springframework.boot:spring-boot-starter-webflux',
        'org.springframework.boot:spring-boot-starter-oauth2-client',
        'org.zalando:problem-spring-webflux:0.25.0',
        "com.okta.sdk:okta-sdk-api:${oktaVersion}"

    runtime "com.okta.sdk:okta-sdk-impl:${oktaVersion}",
        "com.okta.sdk:okta-sdk-httpclient:${oktaVersion}"


    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
}

1 Ответ

2 голосов
/ 28 октября 2019

@RestController("/api/user") не присваивает префикс URL, а назначает заданное имя вашему контроллеру. См. Javadoc . @RestController является специализацией аннотации стереотипа @Controller, которая является @Component. @Component принимает value, и value должно использоваться в качестве имени для данного компонента. Если имя не указано, оно будет сгенерировано автоматически.

Если вам нужен префикс, вам нужен дополнительный @RequstMapping("/api/user") для класса контроллера.

...