通过ID将默认订单的ID附加到使用Spring Data的Pageable

osc*_*car 1 java spring spring-mvc spring-data

我正在使用spring Pageable数据和对象。当按在数据库中可以具有相同值的字段进行排序时,更改页面会检索错误的结果。

我正在尝试使用HandlerInterceptorAdapter通过id添加默认订单,如下所示:

我的拦截器:

public class OrderByIdWebArgumentResolver extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {

        HandlerMethod hm= (HandlerMethod) handler;
        Method method = hm.getMethod();
        OrderById orderById = method.getAnnotation(OrderById.class);
        if (orderById != null) {
            for (MethodParameter parametro : hm.getMethodParameters()) {
                if (parametro.getGenericParameterType().equals(Pageable.class)) {
                    Map<String, String[]> parameters = request.getParameterMap();
                    String[] sortById = new String[2];
                    sortById[0] = "id";
                    sortById[0] = "desc";
                    parameters.put("sort", sortById);
                }

            }

        }

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

@OrderById
@RequestMapping(value = "/print", method = RequestMethod.GET)
public String printMensagges(@ModelAttribute MensaggesOption messageSelector, final ModelMap model,
       @SortDefault(sort = "date", direction = Sort.Direction.DESC) @PageableDefault(value = 5) final Pageable pageable, final Principal principal) {

    //I need the pageable has order by id here or in a service method
    List<Message> messages = messageService.findAll(pageable);

    return "/index";
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

java.lang.IllegalStateException:JBWEB000096:不允许对锁定的ParameterMap进行任何修改

有没有办法添加默认订单?您可以添加具有Pageable参数的服务方法吗?

Sco*_*ttM 5

您可以仅在@PageableDefault定义中添加排序,而不必添加单独的@SortDefault。

@PageableDefault(sort = {"name", "id"}, direction = Sort.Direction.DESC, value = 5) final Pageable pageable
Run Code Online (Sandbox Code Playgroud)