Denetleyiciyi, denetleyicinin girişine bağlı olarak isteğe bağlı sıralayıcıların etkinleştirilebileceği / devre dışı bırakılabileceği şekilde yapılandırın

oy
43

Arka uçta isteğe bağlı sıralayıcıların kullanımına izin veren bir uç nokta yazmaya çalışıyorum.

Örneğin, bir listedeki öğeleri (son noktamın denetleyicisinin döndürdüğü şey) oluşturulma tarihlerine göre sıralamamı sağlayan bir sıralayıcı var. İlgili denetleyici parametresi true olursa, öğeler en yeniden başlayıp en eskiye doğru sıralanır. İlgili parametre yanlışsa, tam tersi.

Bu bir Spring Boot projesidir.

Bunu başarmanın daha uygun bir yolu olup olmadığını merak ediyordum.

Bu benim denetleyicim:

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

Son iki parametrenin doğru / yanlış değerine bağlı olarak sortStartingFromHighestGrade ve sortStartingFromEarliestDate , hizmet sınıfında arka planda farklı işlemler gerçekleşir.

Oluştur 15/05/2020 saat 21:22
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Ücretli destek ile yay ile sıralama uygulayabilirsiniz.

DB'den veri almak için bir Ücretli nesne oluşturacaksınız.

Kullanmak zorundasın PagingAndSortingRepository Bahar Verileri için:

public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Integer> {

Ve düzenli ara .findAll(pageable) hizmet katmanında varlığınız için herhangi bir Sıralama seçeneği ile.

Ve kontrolörünüz şöyle görünecek:

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

Geri dönmek istemiyorsan Page<Entity> bunu hizmet katmanındaki Liste'ye dönüştürebilirsiniz.

GÜNCELLEME:

Tarafından ödenebilir nesne oluşturmak yerine PageRequest.of() , doğrudan URL ile iletebilirsiniz:

= 0 & size = 10 & sort = dereceli / başarılı? Page

nerede grade Öğrenci sınıfından bir alandır.

veya

/ Başarılı? Page = 0 & boyutu sort = 10 & = notu, ask

Tüm parametreler Dahili olarak aşağıdaki gibi tanınır:

page - Page number

size - Page Size

sort - sort by (Order by)

direction - ASC / DESC

O zaman kontrol cihazınız:

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

Yararlı referanslar:

Cevap 17/05/2020 saat 22:53
kaynak kullanıcı

oy
0

Bahar burada çeşitli şekillerde kullanışlı olabilir:

  1. Bahar MVC açısından, tüm istek parametrelerini ayrı değişkenlerde sağlamak zorunda değilsiniz, Bunun yerine tüm bu parametrelerle bir sınıf tanımlayabilirsiniz ve bahar bunları sizin için eşler:
public class Params {
  private Instant startDate;
  private Instant endDate;
  private int page = 0;
  private int size = 10;
  ... constructor/getters/setters ...
}

Daha sonra kumandanızda aşağıdakileri yapabilirsiniz, IMHO, daha temiz görünüyor:

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

@Nazar_art'ın belirttiği gibi, yay verileriniz varsa Bahar verilerinin Ücretli desteğini kullanabilirsiniz. Aksi takdirde, bunu kendiniz uygulamak zorunda kalacaksınız, bu zaten önemli değil.

Cevap 21/05/2020 saat 15:46
kaynak kullanıcı

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