2017-06-07 9 views
2

Spring 5のルータ機能を使用するSpring Restコントローラを持つ Postmanクライアントを使用して要求を行うと、すべて正常に動作します。 しかし、Angular 4アプリケーションである別の原点から要求を行うと、この例外が発生します。Spring 5「No LookupPath属性」例外

java.lang.IllegalStateException:LookupPath属性がありません。 at org.springframework.web.server.support.LookupPath.lambda $ getCurrent $ 1(LookupPath.java:106)〜[spring-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] java.util.Optional.orElseThrow(Optional.java:290)〜[na:1.8.0_72] at org.springframework.web.server.support.LookupPath.getCurrent(LookupPath.java:106)〜[spring-web -5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] at org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource.getCorsConfiguration(UrlBasedCorsConfigurationSource.java:84)〜[spring-web-5.0.0] .BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] at org.springframework.web.reactive.handler.AbstractHandlerMapping.lambda $ getHandler $ 1(AbstractHandlerMapping.java:163)〜[spring-webflux-5.0.0。 BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]

@RestController 
public class AdminRest { 
public RouterFunction<ServerResponse> route() { 
    return RouterFunctions 
      .route(RequestPredicates.GET("/admin/orgnaizationUsers"), this::getOrgnaizationUsers) 
}  

private Mono<ServerResponse> getOrgnaizationUsers(ServerRequest request) { 
    return Mono 
      .just(request) 
      .then(
        Flux.from(organizationUserPostgresCollection.executeQuery("SELECT * FROM organization_user")) 
        .map(OrganizationUserDTO::convert) 
        .collectList() 
        .map(OrganizationUsersDTOView::new)) 
      .flatMap(
        organizationUsersDTOView -> ServerResponse.ok().header("Access-Control-Allow-Origin", "*") 
          .body(Mono.just(organizationUsersDTOView), OrganizationUsersDTOView.class)) 
      .switchIfEmpty(ServerResponse.notFound().header("Access-Control-Allow-Origin", "*").build()); 
} 
} 

UrlBasedCorsConfigurationSourceは、それが初期化されている前LookupPathを取得しようとすると、問題が発生しているようです https://github.com/spring-projects/spring-framework/commit/cf1bc8119999e2bf3f41ae572f5b83536685ce5e

+0

は私のだろうが、 '' @ Configuration'クラスの '@ Bean'方法もRouterFunction'べきではないのですか? –

+0

すでに存在します。 '@ConfigurationパブリッククラスRESTConfiguration { @Bean公共RouterFunction adminRoute(AdminRest adminRest){ 戻りadminRest.route()。 } } ' –

答えて

0

を確認してください。ルックアップパスを作成する新しいWebfilterをアプリケーションに追加することで、これを回避することができます。

これは、例えば次のように行うことができます。

@Component 
public class SomeFilter extends WebFilter { 
    @Override 
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { 
     LookupPath.getOrCreate(exchange, new HttpRequestPathHelper()); 
     return chain.filter(exchange); 
    } 
} 
関連する問題