3

ページネーションのフォールバック状況を定義する ArgumentResolver があります。

public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
        resolver.setFallbackPageable(new PageRequest(0, 5, Direction.DESC, "id"));
        argumentResolvers.add(resolver);
    }
}

そして、これは私のコントローラーメソッドがどのように見えるかです:

@RequestMapping(RequestMappings.SHOW_ALL_ITEMS)
public String showAllItems(Model model, Pageable pageable) {

    PageWrapper<Item> page = new PageWrapper<Item> 
        (itemService.getAllItems(pageable), RequestMappings.SHOW_ALL_ITEMS);
    model.addAttribute("page", page);

    return ViewNamesHolder.SHOW_ALL_ITEMS;
}

別のフォールバック状況で別のコントローラー メソッドが必要な場合はどうすればよいですか? 多くの引数リゾルバー オブジェクトを登録できることを知っています。しかし、この場合、コントローラーメソッドで使用するものをどのように定義すればよいでしょうか? :

public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        PageableHandlerMethodArgumentResolver resolverWithSizeFive = new PageableHandlerMethodArgumentResolver();
        resolverWithSizeFive.setFallbackPageable(new PageRequest(0, 5, Direction.DESC, "id"));
        argumentResolvers.add(resolverWithSizeFive);

        PageableHandlerMethodArgumentResolver resolverWithSizeTen = new PageableHandlerMethodArgumentResolver();
        resolverWithSizeTen.setFallbackPageable(new PageRequest(0, 10, Direction.DESC, "id"));
        argumentResolvers.add(resolverWithSizeTen);
    }
}
4

1 に答える 1

2

HandlerMethodArgumentResolverインスタンスは登録順にチェックされます。

Spring は、最初にデフォルトの注釈ベースの引数リゾルバーを登録し、次に型ベースの引数リゾルバー、カスタム リゾルバー、いくつかのキャッチオール リゾルバーを登録します。これらは で確認できますRequestMappingHandlerAdapter#getDefaultArgumentResolvers()

あなたの場合、PageableあるハンドラーメソッドPageableと別のハンドラーメソッドを区別するために、私が考えることができる唯一の方法は、独自のPageableHandlerMethodArgumentResolverインスタンスをサブクラス化して登録することです。フォールバックの種類ごとに 1 つsupportsParameter。メソッドでページング可能なフォールバックを識別するカスタム アノテーションをチェックします。

于 2013-11-04T20:42:07.323 に答える