Spring Data Rest-فرز حسب خصائص متعددة




spring-data spring-data-jpa (2)

محلول (tl ؛ د)

عند الرغبة في الفرز في حقول متعددة ، يمكنك ببساطة وضع sort عدة مرات في URI. على سبيل المثال ، your/uri?sort=name,asc&sort=numberOfHands,desc . Spring Data قادر على بناء كائن Pageable بأنواع متعددة.

تفسير

لا يوجد بالفعل معيار محدد بشأن كيفية إرسال قيم متعددة للمعلمة في URI. راجع الطريقة الصحيحة لتمرير قيم متعددة لنفس اسم المعلمة في طلب GET .

ومع ذلك ، هناك بعض المعلومات في Java Servlet Spec التي تشير إلى كيفية تحليل حاويات Java servlet لمعلمات الطلب.

إرجاع الأسلوب getParameterValues صفيف كائنات String تحتوي على كافة قيم المعلمات المرتبطة اسم المعلمة. ... - Java Servlet Spec ، القسم 3.1

يوضح النموذج في هذا القسم (على الرغم من أنه يمزج بين الطلب والبيانات الأساسية)

على سبيل المثال ، إذا تم تقديم طلب باستخدام سلسلة استعلام من a=hello نشر من a=goodbye&a=world ، فسيتم طلب مجموعة المعلمات الناتجة a=hello, goodbye, world .

يوضح هذا النموذج أنه عندما يتم تقديم معلمة (في المثال) عدة مرات ، سيتم تجميع النتائج في String[] .

لدي كيان على النحو التالي

Class Person{
String id;
String name;
String numberOfHands;
}

باستخدام Spring Data Rest (Gosling Release Train) ، يمكنني تحديد ذلك

localhost/Person?sort=name,asc

لفرز اسم الاسم تصاعدي. الآن ، في الحالة التي أحتاج فيها إلى الفرز حسب numberOfHands تنازليًا واسم تصاعديًا. أنا قادر على تحديد

localhost/Person?sort=numberOfHands,name,asc

لكن ، أنا غير قادر على تحديد

localhost/Person?sort=numberOfHands,desc,name,asc

هل هناك طريقة لتحديد ترتيب فرز متعددة؟

شكر!


فيما يلي كيفية إنشاء كائن فرز متعدد يدويًا / برمجيًا.

Sort sort = Sort.by(
    Sort.Order.asc("name"),
    Sort.Order.desc("numberOfHands"));
return personRepository.findAll(sort);

ملاحظة: هذا الحل لا يحل بشكل مباشر السؤال الأصلي الذي تم طرحه ، ولكنه قد يساعد الزائرين الذين وصلوا إلى هذا السؤال أثناء البحث عن حل حول كيفية فرز خصائص متعددة من منظور الواجهة الخلفية / بطريقة "مضغوطة" إلى حد ما. (هذا الحل لا يتطلب / يأخذ أي معلمات URI)





spring-data-rest