【问题标题】:Spring Data REST - Sort is always null in Pageable parameter in rest controllerSpring Data REST - 在休息控制器的可分页参数中排序始终为空
【发布时间】:2020-02-03 05:18:19
【问题描述】:

我在 Spring Boot (1.5.17) 中使用 Spring Data REST,并且我的代码中有以下控制器。

@RestController
public class StudentController {

    @RequestMapping(method = GET, value = "students/{id}/notifications")
    public @ResponseBody
    ResponseEntity<?> getStudentNotifications(@PathVariable Long id, PersistentEntityResourceAssembler resourceAssembler, Pageable page) {

            Student student = studentRepo.findOne(id);

            Page<Notification> notifications = notificationHandler.getUnreadNotifications(student.getId(),page);

            return new ResponseEntity<>(pagedResourcesAssembler.toResource(notifications, resourceAssembler), HttpStatus.OK);


    }
}

控制器工作正常,但我不能使用像students/1/notifications?sort=createdDate,DESC 这样的排序参数。它总是按创建日期升序排序。

我将Pageable参数打印到控制台[number: 0, size 20, sort: null],它显示排序属性始终为空。

那么我在这里做错了什么?

编辑

MVC 配置

@Configuration
public class SpringMvcConfig extends WebMvcConfigurerAdapter {

    @Autowired
    @Qualifier("repositoryExporterHandlerAdapter")
    RequestMappingHandlerAdapter repositoryExporterHandlerAdapter;

    @Override
    public void addArgumentResolvers(
            List<HandlerMethodArgumentResolver> argumentResolvers) {
        List<HandlerMethodArgumentResolver> customArgumentResolvers = repositoryExporterHandlerAdapter.getCustomArgumentResolvers();
        argumentResolvers.addAll(customArgumentResolvers);
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {

    }

}

【问题讨论】:

  • 为您的排序添加 queryParams
  • 您能详细说明一下吗?
  • 你的查询参数是什么
  • students/1/notifications?sort=createdDate,DESC
  • 您是否在配置中包含PageableHandlerMethodArgumentResolver 以便在 REST 控制器方法中使用 Pageable 参数?

标签: java spring-boot spring-data-rest


【解决方案1】:

控制器工作正常,但我不能使用排序参数 像学生/1/通知?createdDate,DESC。它总是按 创建日期按升序排列。

如果你试图传递排序

students/1/notifications?createdDate,DESC

它不起作用,因为 Pageable 有排序参数,你需要像下面这样调用。

students/1/notifications??sort=createdDate,DESC

【讨论】:

  • 对不起,我在问题中犯了一个错误。我正在使用您提到的排序参数,但它不起作用
  • 好的,你能不能也贴一下你要应用排序的实体对象?
  • 对不起,我在问题中犯了一个错误。可笑。
【解决方案2】:

addArgumentResolvers 方法中添加以下内容

argumentResolvers.add(new PageableHandlerMethodArgumentResolver());

【讨论】:

  • 感谢您的回答,但我发现控制器没有问题。实际上 createdDate 文件是一个 json 被忽略的字段,这就是排序不起作用的原因
猜你喜欢
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 2016-03-09
相关资源
最近更新 更多