Java 配置控制器时,可根据控制器启用/禁用可选分拣机';s输入

Java 配置控制器时,可根据控制器启用/禁用可选分拣机';s输入,java,spring,spring-boot,java-8,controller,Java,Spring,Spring Boot,Java 8,Controller,我正在尝试编写一个端点,允许在后端使用可选的分类器 例如,我有一个分类器,它允许我根据创建日期对列表中的元素进行排序,这是端点控制器返回的元素 如果相应的控制器参数为true,则元素将从最新的元素开始排序,并向最旧的元素移动 如果相应的参数为false,则相反 这是一个springboot项目 我想知道是否有更适合spring的方法来实现这一点? 这是我的控制器: @RestController public class StudentsController{ @Autowired

我正在尝试编写一个端点,允许在后端使用可选的分类器

例如,我有一个分类器,它允许我根据创建日期对列表中的元素进行排序,这是端点控制器返回的元素

如果相应的控制器参数为
true
,则元素将从最新的元素开始排序,并向最旧的元素移动

如果相应的参数为
false
,则相反

这是一个springboot项目

我想知道是否有更适合spring的方法来实现这一点?

这是我的控制器:

@RestController
public class StudentsController{
    @Autowired
    private GradeBook yearlyGrades;

    @GetMapping("/successful")
    public List<Student> getSuccessfulStudents(
        @RequestParam(name = "startDate") Instant startDate,
        @RequestParam(name = "endDate") Instant endDate,
        @RequestParam(defaultValue = "false", required = false) boolean sortStartingFromHighestGrade,
        @RequestParam(defaultValue = "false", required = false) boolean sortStartingFromEarliestDate) {


        return this.yearlyGrades.getSuccessfulStudents(startDate, endDate, 
                                                       sortStartingFromHighestGrade, 
                                                       sortStartingFromEarliestDate);
    }
}
@RestController
公共班级学生管理员{
@自动连线
私人成绩册年鉴成绩;
@GetMapping(“/successful”)
获得成功学生的公共列表(
@RequestParam(name=“startDate”)即时开始日期,
@RequestParam(name=“endDate”)即时结束日期,
@RequestParam(defaultValue=“false”,required=false)布尔排序从最高级开始,
@RequestParam(defaultValue=“false”,required=false)布尔排序从最早的日期开始){
返回此。yearlyGrades.getSuccessfulStudents(开始日期、结束日期、,
从最高等级开始,
从最早日期开始的排序);
}
}
根据最后两个参数的
true/false
值:

从最高等级开始排序
从最早的日期开始排序


不同的处理在服务类的后台进行。

您可以通过支持spring实现排序

您将创建一个可分页对象,用于从DB获取数据

您可以对Spring数据使用
分页和排序存储库

public interface StudentRepository extends PagingAndSortingRepository<Student, Integer> {
如果不想返回
页面
,可以在服务层将其转换为列表

更新:

您可以通过URL直接传递对象,而不是通过
PageRequest.of()
创建Pageable对象:

/成功?页面=0,大小=10,排序=grade

其中,
grade
是来自学生班级的字段

/成功?页面=0,大小=10,排序=grade,询问

所有参数内部可通过分页识别,如下所示:

page - Page number

size - Page Size

sort - sort by (Order by)

direction - ASC / DESC
那么您的控制器应该是:

@GetMapping("/successful")
public Page<Student> getSuccessfulStudents(
    @RequestParam(name = "startDate") Instant startDate,
    @RequestParam(name = "endDate") Instant endDate,
    Pageable pageable) {
    return yearlyGrades.getSuccessfulStudents(startDate, endDate, pageable);
}
@GetMapping(“/successful”)
公共页面getSuccessfulStudents(
@RequestParam(name=“startDate”)即时开始日期,
@RequestParam(name=“endDate”)即时结束日期,
可寻呼(可寻呼){
返回yearlyGrades.getSuccessfulStudents(开始日期、结束日期、可分页);
}
有用的参考资料:


您可以通过支持spring实现排序

您将创建一个可分页对象,用于从DB获取数据

您可以对Spring数据使用
分页和排序存储库

public interface StudentRepository extends PagingAndSortingRepository<Student, Integer> {
如果不想返回
页面
,可以在服务层将其转换为列表

更新:

您可以通过URL直接传递对象,而不是通过
PageRequest.of()
创建Pageable对象:

/成功?页面=0,大小=10,排序=grade

其中,
grade
是来自学生班级的字段

/成功?页面=0,大小=10,排序=grade,询问

所有参数内部可通过分页识别,如下所示:

page - Page number

size - Page Size

sort - sort by (Order by)

direction - ASC / DESC
那么您的控制器应该是:

@GetMapping("/successful")
public Page<Student> getSuccessfulStudents(
    @RequestParam(name = "startDate") Instant startDate,
    @RequestParam(name = "endDate") Instant endDate,
    Pageable pageable) {
    return yearlyGrades.getSuccessfulStudents(startDate, endDate, pageable);
}
@GetMapping(“/successful”)
公共页面getSuccessfulStudents(
@RequestParam(name=“startDate”)即时开始日期,
@RequestParam(name=“endDate”)即时结束日期,
可寻呼(可寻呼){
返回yearlyGrades.getSuccessfulStudents(开始日期、结束日期、可分页);
}
有用的参考资料:


    • 在这里,Spring可以通过多种方式派上用场:

    • 从Spring MVC的角度来看,您不必在单独的变量中提供所有请求参数,相反,您可以使用所有这些参数定义一个类,Spring将为您映射这些参数:
    • 然后在控制器中执行以下操作,IMHO看起来更干净:

      @GetMapping
      public Page<Student> getSuccessfulStudents(Params params) {
         ...
      }
      
      @GetMapping
      公共页面getSuccessfulStudents(参数){
      ...
      }
      

      正如@nazar_art所提到的,如果您有spring数据,您可以使用spring数据的可分页支持,否则您必须自己实现它,这并不是什么大问题。

      spring可以通过多种方式派上用场:

    • 从Spring MVC的角度来看,您不必在单独的变量中提供所有请求参数,相反,您可以使用所有这些参数定义一个类,Spring将为您映射这些参数:
    • 然后在控制器中执行以下操作,IMHO看起来更干净:

      @GetMapping
      public Page<Student> getSuccessfulStudents(Params params) {
         ...
      }
      
      @GetMapping
      公共页面getSuccessfulStudents(参数){
      ...
      }
      

      正如@nazar_art所提到的,如果您有spring数据,您可以使用spring数据的分页支持,否则您必须自己实现,这也不是什么大问题。

      如果后端处理真的不同,然后,您可以使用相同的
      路径
      但不同的
      参数
      字段定义不同的端点,该字段允许定义附加条件,如果后端处理确实不同,请参阅
      @GetMapping
      注释文档和中的示例,然后,您可以使用相同的
      路径
      但不同的
      参数
      字段定义不同的端点,该字段允许定义其他条件,请参阅
      @GetMapping
      注释文档和中的示例,如果您是在API级别询问,那么这与Spring无关,而是与REST API设计有关,这里可以使用多个符号

      GET ...&sort=+grade and GET ...&sort=-grade
      GET ...&sort=grade.asc and GET ...&sort=grade.desc
      GET ...&sort=asc(grade) and GET ...&sort=desc(grade)
      
      更多参数

      GET ...&sort=+grade&sort=-age
      GET ...&sort=+grade,-age
      
      对于弹簧部分,请看 和