Konfigurujte řadič tak, aby bylo možné na základě vstupu řadiče povolit / zakázat volitelné třídiče

hlasů
43

Snažím se napsat koncový bod, který umožňuje použití volitelných třídičů v pozadí.

Mám například třídič, který mi umožňuje třídit prvky v seznamu - což je to, co se vrátí ovladač mého koncového bodu - podle data jejich vytvoření. Pokud je odpovídající parametr řídicí jednotky pravdivý, prvky jsou seřazeny od začátku od nejnovějšího a směrem k nejstaršímu. Pokud je odpovídající parametr nepravdivý, pak opak.

Toto je projekt Spring Boot.

Přemýšlel jsem, jestli existuje více vhodnější způsob, jak toho dosáhnout?

Toto je můj ovladač:

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

V závislosti na skutečné / nepravdivé hodnotě posledních dvou parametrů sortStartingFromHighestGrade a sortStartingFromEarliestDate , dochází k různému zpracování na pozadí ve třídě služeb.

Položena 15/05/2020 v 21:22
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

Mohli byste implementovat třídění na jaře s podporou Pageable .

Vytvoříte Pageable objekt pro získání dat z DB.

Musíte použít PagingAndSortingRepository pro jarní údaje:

public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Integer> {

A volejte pravidelně .findAll(pageable) s jakoukoli možností třídění pro vaši entitu na servisní vrstvě.

A váš ovladač bude vypadat takto:

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

Pokud se nechcete vrátit Page<Entity> můžete ji převést do Seznamu ve vrstvě služeb.

AKTUALIZACE:

Místo vytváření Pageable objektu pomocí PageRequest.of() , můžete ji předat přímo pomocí adresy URL:

/ úspěšná? page = 0 & size = 10 & sort = grade

kde grade je pole ze studentské třídy.

nebo

/ úspěšné? page = 0 & size = 10 & sort = grade, zeptejte se

Všechny parametry interně rozpoznává společnost Pageable takto:

page - Page number

size - Page Size

sort - sort by (Order by)

direction - ASC / DESC

Pak by měl být váš řadič:

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

Užitečné odkazy:

Odpovězeno 17/05/2020 v 22:53
zdroj uživatelem

hlasů
0

Jaro se zde může hodit několika způsoby:

  1. Z pohledu Spring MVC nemusíte dodávat všechny parametry požadavku v samostatných proměnných. Místo toho můžete definovat třídu se všemi těmito parametry a jaro je pro vás mapuje:
public class Params {
  private Instant startDate;
  private Instant endDate;
  private int page = 0;
  private int size = 10;
  ... constructor/getters/setters ...
}

Pak ve svém řadiči můžete udělat následující, IMHO, vypadá čistěji:

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

Jak již @ @zarzar_art zmínil, můžete použít Pageable podporu jarních dat, pokud máte jarní údaje. Jinak je budete muset implementovat sami, což není stejně velká věc.

Odpovězeno 21/05/2020 v 15:46
zdroj uživatelem

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