Konfigurálja a vezérlőt oly módon, hogy az opcionális szortírozók engedélyezhetők / tilthatók legyenek a vezérlő bemenete alapján

szavazat
43

Megpróbálom olyan végpontot írni, amely lehetővé teszi az opcionális rendezők használatát a háttérben.

Például van egy válogatóm, amely lehetővé teszi az elemek rendezését a listában - és ezt adja vissza a végpont vezérlője - a létrehozásuk dátuma alapján. Ha a megfelelő vezérlőparaméter igaz, akkor az elemeket a legfrissebbről indítják el, és a legidősebb felé mozognak. Ha a megfelelő paraméter hamis, akkor az ellenkezője.

Ez egy Spring Boot projekt.

Kíváncsi voltam, vajon van-e tavaszra megfelelőbb módszer ennek elérésére?

Ez az irányítóm:

@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);
    }
}

Az utolsó két paraméter valódi / hamis értékétől függően sortStartingFromHighestGrade és sortStartingFromEarliestDate , eltérő feldolgozás történik a háttérben a szolgáltatási osztályon.

A kérdést 15/05/2020 21:22
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

A válogatást tavasszal hajthatja végre a Pageable támogatás segítségével.

Létrehoz egy Objektálható objektumot az adatok beolvasásához a DB-ből.

Használnia kell PagingAndSortingRepository tavaszi adatok esetén:

public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Integer> {

És hívj rendszeresen .findAll(pageable) bármilyen Rendezési opcióval az Ön entitásának a szolgáltatási rétegen.

A vezérlője így néz ki:

@GetMapping
public Page<Student> getSuccessfulStudents(
        @RequestParam(name = "startDate") Instant startDate,
        @RequestParam(name = "endDate") Instant endDate,
        @RequestParam(value = "page", required = false, defaultValue = "0") int page,
        @RequestParam(value = "size", required = false, defaultValue = "10") int size) {
    return yearlyGrades.getSuccessfulStudents(startDate, endDate,
                 PageRequest.of(page, size, Sort.by("propertyFromClass")));
}

Ha nem akarja visszatérni Page<Entity> konvertálhatja a listára a szolgáltatási rétegben.

UPDATE:

Ahelyett, hogy létrehozta a Pageable objektumot PageRequest.of() , közvetlenül URL-en átadhatja:

/ Sikeres? Page = 0 & size = 10 & sort = évfolyam

ahol grade egy mező a hallgatói osztályból.

vagy

/ Sikeres? Page = 0 & size = 10 & sort = évfolyam, kérdezze

Az összes paraméter az oldalon belül felismerhető, az alábbiak szerint:

page - Page number

size - Page Size

sort - sort by (Order by)

direction - ASC / DESC

Akkor a vezérlőnek:

@GetMapping("/successful")
public List<Student> getSuccessfulStudents(
    @RequestParam(name = "startDate") Instant startDate,
    @RequestParam(name = "endDate") Instant endDate,
    Pageable pageable) {
    return yearlyGrades.getSuccessfulStudents(startDate, endDate, pageable);
}

Hasznos referenciák:

Válaszolt 17/05/2020 22:53
a forrás felhasználó

szavazat
0

A tavasz több szempontból is hasznos lehet itt:

  1. A tavaszi MVC szempontjából nem kell minden kérési paramétert különváltozóként megadnia, ehelyett meghatározhat egy osztályt ezekkel a paraméterekkel, és a tavasz leképezi őket az Ön számára:
public class Params {
  private Instant startDate;
  private Instant endDate;
  private int page = 0;
  private int size = 10;
  ... constructor/getters/setters ...
}

Akkor a vezérlőben a következőket teheti meg, az IMHO tisztábbnak tűnik:

@GetMapping
public Page<Student> getSuccessfulStudents(Params params) {
   ...
}

Amint a @nazar_art megemlítette, akkor használhatja a tavaszi adatok Pageable támogatását, ha vannak tavaszi adatai. Ellenkező esetben magának kell végrehajtania, ami egyébként nem nagy ügy.

Válaszolt 21/05/2020 15:46
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more