0

コントローラーで特別に準備された RedirectView インスタンスを取得したい:

@Controller
public class MyController {
  @RequestMapping(value = "/", method = GET)
  public RedirectView myFkt(@Named("myName") RedirectView rv) {
    return rv;
  }

私の設定:

@Configuration
@EnableWebMvc
@ComponentScan({"com.example"})
public class SpringServletConfig extends WebMvcConfigurerAdapter {
    private static final Logger LOG = LoggerFactory.getLogger(WebMvcConfigurerAdapter.class);

    @Bean(name = "myName") @Scope("request")
    public RedirectView myName() {
        RedirectView rv = new RedirectView("/");
        rv.setContextRelative(true);
        return rv;
    }

}

コントローラー関数では、構成したものではなく、常に未構成の RedirectView インスタンスを取得します。

4

3 に答える 3

0

リダイレクト用の @RequestMapping を作成し、アプリケーション全体で使用される @ControllerAdvice アノテーションが付けられたコントローラーに追加します。

于 2013-10-30T23:05:18.817 に答える
0

私の知る限り、ハンドラーメソッドでパラメーターHandlerMethodArgumentResolverを解決することはありません。@Named自分で書いて登録することもできますが、面倒です。

メンバー変数として注入してみませんか?

@Controller
public class MyController {

    @Resource("myName")
    private RedirectView rv;

    @RequestMapping(value = "/", method = GET)
    public RedirectView myFkt() {
        return rv;
    }
}
于 2013-10-30T21:36:36.917 に答える
0

まず、Bean の構成を変更して、アノテーションにproxyMode属性を含めます。@Scopeこれにより、スコープ付きプロキシになります。タイプを保持したいため、クラスベースのプロキシが必要です (これには cglib が必要です)。

@Bean(name = "myName") 
@Scope(value="request", proxyMode=ScopedProxyMode.TARGET_CLASS) 
public RedirectView myName() {
    RedirectView rv = new RedirectView("/");
    rv.setContextRelative(true);
    return rv;
}

@Controllerこの変更後、通常どおりに Bean を注入するだけです。スコープ付きプロキシを挿入するためにRedirectView単純に使用する単一の構成があると仮定します。@Autowired(それ以外の場合は、名前で使用するか、注釈@Resourceを追加します)。@Qualifier

@Controller
public class MyController {

    @Autowired
    private RedirectView rv;

    @RequestMapping(value = "/", method = GET)
    public RedirectView myFkt() {
       return rv;
    }
}
于 2013-10-31T13:47:43.707 に答える