नियंत्रक को इस तरह से कॉन्फ़िगर करें कि नियंत्रक के इनपुट के आधार पर वैकल्पिक सॉर्टर्स को सक्षम / अक्षम किया जा सके

वोट
1

मैं एक समापन बिंदु लिखने की कोशिश कर रहा हूं जो बैकएंड में वैकल्पिक सॉर्टर्स के उपयोग की अनुमति देता है।

उदाहरण के लिए, मेरे पास एक सॉर्टर है जो मुझे सूची में तत्वों को क्रमबद्ध करने की अनुमति देता है - जो कि मेरे समापन बिंदु के नियंत्रक रिटर्न - अपनी निर्माण तिथि के आधार पर है। यदि संबंधित नियंत्रक पैरामीटर सत्य है तो तत्वों को नए से शुरू किया जाता है और सबसे पुराने की ओर ले जाया जाता है। यदि संबंधित पैरामीटर गलत है, तो इसके विपरीत।

यह एक स्प्रिंग बूट प्रोजेक्ट है।

मैं सोच रहा था कि क्या इसे प्राप्त करने के लिए अधिक वसंत-उपयुक्त तरीका है?

यह मेरा नियंत्रक है:

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

पिछले दो मापदंडों के सही / गलत मूल्य पर निर्भर करता है sortStartingFromHighestGrade तथा sortStartingFromEarliestDate , विभिन्न प्रसंस्करण सेवा वर्ग में पृष्ठभूमि में होता है।

15/05/2020 को 21:22
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
0

आप पगबल समर्थन के साथ वसंत के साथ छंटाई को लागू कर सकते हैं

आप डीबी से डेटा प्राप्त करने के लिए एक पैजेबल ऑब्जेक्ट बनाएंगे।

आपको उपयोग करना होगा PagingAndSortingRepository स्प्रिंग डेटा के लिए:

public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Integer> {

और नियमित कॉल करें .findAll(pageable) सेवा स्तर पर आपकी इकाई के लिए किसी भी छँटाई विकल्प के साथ।

और आपका नियंत्रक कुछ इस तरह दिखाई देगा:

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

यदि आप वापस नहीं लौटना चाहते हैं Page<Entity> आप इसे सेवा स्तर पर सूची में परिवर्तित कर सकते हैं।

अपडेट करें:

इसके बजाय Pageable ऑब्जेक्ट बनाने के द्वारा PageRequest.of() , आप इसे URL द्वारा सीधे पास कर सकते हैं:

/ सफल? पृष्ठ = 0 और आकार = 10 & प्रकार = ग्रेड

कहाँ पे grade छात्र वर्ग से एक क्षेत्र है।

या

/ सफल? पृष्ठ = 0 और आकार = 10 & प्रकार = ग्रेड, पूछना

सभी पैरामीटर निम्नलिखित के रूप में Pageable द्वारा आंतरिक रूप से पहचानते हैं:

page - Page number

size - Page Size

sort - sort by (Order by)

direction - ASC / DESC

तब आपका नियंत्रक होना चाहिए:

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

उपयोगी संदर्भ:

17/05/2020 को 22:53
का स्रोत उपयोगकर्ता

वोट
0

वसंत यहां कई तरीकों से काम कर सकता है:

  1. स्प्रिंग एमवीसी के दृष्टिकोण से आपको अलग-अलग चर में सभी अनुरोध पैरामीटर की आपूर्ति करने की आवश्यकता नहीं है, इसके बजाय आप इन सभी मापदंडों के साथ एक वर्ग को परिभाषित कर सकते हैं और वसंत उन्हें आपके लिए मैप करेगा:
public class Params {
  private Instant startDate;
  private Instant endDate;
  private int page = 0;
  private int size = 10;
  ... constructor/getters/setters ...
}

फिर अपने कंट्रोलर में आप निम्न कार्य कर सकते हैं, IMHO, अधिक साफ दिखता है:

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

जैसा कि @nazar_art ने उल्लेख किया है, आप वसंत डेटा का उपयोग करने योग्य समर्थन का उपयोग कर सकते हैं यदि आपके पास वसंत डेटा है अन्यथा आपको इसे स्वयं द्वारा लागू करना होगा, जो वैसे भी कोई बड़ी बात नहीं है।

21/05/2020 को 15:46
का स्रोत उपयोगकर्ता

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