2017-09-28 11 views
2

私は春Webfluxアプリケーションに、と私は私のコントローラのいずれかにリダイレクトを実行したい:RedirectAttributesは春で作業していない5

@Controller 
@RequestMapping(value = "/login") 
public class AuthenticationController { 

    @Autowired 
    private AuthenticationFacade authenticationFacade; 

    @GetMapping 
    public String loginView(final Model model) { 

     model.addAttribute("authenticationForm", new AuthenticationForm()); 

     return "login"; 
    } 

    @PostMapping 
    public Rendering authenticate(@Valid final AuthenticationForm authenticationForm, 
            final BindingResult bindingResult, final RedirectAttributes redirectAttributes) { 

     if (!bindingResult.hasErrors()) { 
      final AccountDto authenticatedAccount = 
        this.authenticationFacade.authenticate(authenticationForm).block(); 

      if (authenticatedAccount != null) { 
       return Rendering.redirectTo("/home").build(); 
      } 
     } 

     return Rendering.view("login").build(); 
    } 
} 

私はRendering.redirectToは()としてリダイレクションを実行することを知っていますRedirectView。春ブーツ2.0.0.M3(春5.0.0.RC3 - :しかし、私はリダイレクトの属性を提供するために、私のコントローラメソッドのパラメータにRedirectAttributesを追加するときに、私は次の例外があります

2017-09-28 18:35:08.084 ERROR 3702 --- [nio-9000-exec-3] o.s.w.s.adapter.HttpWebHandlerAdapter : Failed to handle request 

java.lang.IllegalStateException: Failed to invoke handler method with resolved arguments: [0][type=org.springframework.validation.support.BindingAwareConcurrentModel][value={}],[1][type=org.springframework.validation.support.BindingAwareConcurrentModel][value={}] on public java.lang.String fr.auchan.wheatley.front.controller.AuthenticationController.loginView(org.springframework.ui.Model,org.springframework.web.servlet.mvc.support.RedirectAttributes) 
    at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$invoke$0(InvocableHandlerMethod.java:131) 
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:118) 
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1010) 
    at reactor.core.publisher.MonoWhen$WhenCoordinator.signal(MonoWhen.java:246) 
    at reactor.core.publisher.MonoWhen$WhenInner.onNext(MonoWhen.java:306) 
    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:198) 
    at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:1567) 
    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.request(FluxPeekFuseable.java:139) 
    at reactor.core.publisher.MonoWhen$WhenInner.onSubscribe(MonoWhen.java:296) 
    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onSubscribe(FluxPeekFuseable.java:173) 
    at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) 
    at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74) 
    at reactor.core.publisher.Mono.subscribe(Mono.java:2769) 
    at reactor.core.publisher.MonoWhen$WhenCoordinator.subscribe(MonoWhen.java:177) 
    at reactor.core.publisher.MonoWhen.subscribe(MonoWhen.java:127) 
    at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) 
    at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74) 
    at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) 
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
    at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:147) 
    at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) 
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:148) 
    at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) 
    at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) 
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:270) 
    at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:790) 
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:115) 
    at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:1567) 
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:156) 
    at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:1381) 
    at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:1255) 
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90) 
    at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) 
    at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59) 
    at reactor.core.publisher.Mono.subscribe(Mono.java:2769) 
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:414) 
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:210) 
    at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:91) 
    at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:55) 
    at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121) 
    at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) 
    at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) 
    at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) 
    at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) 
    at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) 
    at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) 
    at reactor.core.publisher.Mono.subscribe(Mono.java:2769) 
    at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:165) 
    at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) 
    at reactor.core.publisher.Mono.subscribe(Mono.java:2769) 
    at org.springframework.http.server.reactive.ServletHttpHandlerAdapter.service(ServletHttpHandlerAdapter.java:116) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

をここに私の設定です)。 - Spring Webflux

リダイレクション属性をSpring 5でこのように提供することはできませんか?それを行う別の方法はありますか、それともバグですか?

答えて

4

Spring WebFluxでは、org.springframework.web.servlet.mvc.support.RedirectAttributesというSpring MVCクラスを使用しようとしています。これはうまくいきません。

私はWebFluxのそれと同等のものは認識していませんが、これは強化要求である可能性があります。

+0

あなたの答えをありがとう、本当に私たちはSpring Webfluxの属性でリダイレクトできるはずです。 JIRAを開いて改善を求めました:https://jira.spring.io/browse/SPR-16026 – Sancho

0

これはSpring 5でどのように動作するかについては完全にはわかりませんが、基本的には別のURLにリダイレクトすると、HTTPサーバーに対して新しく要求されます。つまり、サーバーは新しいリダイレクトされた要求内のすべての必須の属性とパラメーターにアクセスしてアクセスします。

リダイレクトを使用して生成されたこの新しい要求のために、コントローラが失われているパラメータをコントローラが予期している場合、これがここで問題になると思います。リダイレクトの代わりに、この要求を転送する方法を見つけようとします。これは、エンドコントローラの要求に含まれるすべての元の属性を保持します。

私はこの問題を正しく理解できて、この問題の解決方法を明らかにできないかどうかはわかりません。

+0

感謝。実際には、コントローラメソッドにRedirectAttributesパラメータを追加すると、コードはリダイレクトにも到達せず、メソッドが呼び出されるたびに直接例外をスローします。 Brianが答えてくれたように、RedirectAttributesクラスは現時点でSpring Webfluxでは利用できないと思われます。私は改善のためにJIRAをSpringにオープンしました。 – Sancho

+0

お役立ち情報更新していただきありがとうございます。 – AJavaCoder

0

回答に記載されているとおり、RedirectAttributesの同等物は現時点でSpring Webfluxでは存在しないようです。一部の人々はあまりにもその時点での最新情報を得ることに興味を持っている場合、私は改善を求めて春にJIRAを開け

、ここのリンクです:あなたの答えのためのhttps://jira.spring.io/browse/SPR-16026

関連する問題