मैं स्कैला 2.0.2 प्ले फ्रेमवर्क का उपयोग कर एक वेब एपीआई लागू कर रहा हूं। मैं कई प्राप्त पैरामीटर निकालने और मान्य करना चाहता हूं। और इसके लिए मैं एक खेल "फॉर्म" का उपयोग कर रहा हूं जो मुझे वैकल्पिक फ़ील्ड को परिभाषित करने की अनुमति देता है।प्ले फ्रेमवर्क फॉर्म में डिफ़ॉल्ट मान वैकल्पिक फ़ील्ड को कैसे परिभाषित करें?
समस्या: उन वैकल्पिक फ़ील्ड के लिए, पैरामीटर पास नहीं होने पर मुझे डिफ़ॉल्ट मान को परिभाषित करने की आवश्यकता है। कोड सही तरीके से इन तीन उपयोग के मामलों को पार्स करने का इरादा है?
- /परीक्षण शीर्ष = एबीसी (त्रुटि, एबीसी एक पूर्णांक नहीं है)
- /परीक्षण शीर्ष = 123 (वैध, शीर्ष 123 है)
- /परीक्षण (वैध, शीर्ष है 42 (डिफ़ॉल्ट मान))
मैं निम्नलिखित कोड के साथ आए हैं:
def test = Action {
implicit request =>
case class CData(top:Int)
val p = Form(
mapping(
"top" -> optional(number)
)((top) => CData($top.getOrElse(42))) ((cdata:CData) => Some(Some(cdata.top)))
).bindFromRequest()
Ok("all done.")
}
कोड काम करता है, लेकिन यह निश्चित रूप से सुरुचिपूर्ण नहीं है। लापता अनुरोध पैरामीटर के लिए डिफ़ॉल्ट मान सेट अप करने के लिए बहुत सारी बॉयलर प्लेट चल रही है।
क्या कोई क्लीनर और अधिक संयोग समाधान सुझा सकता है?
यह प्रस्तावित समाधान अच्छी तरह से काम करता है। दुर्भाग्यवश इस समाधान का एकमात्र नकारात्मक पक्ष यह है कि यह बड़ी संख्या में डिफ़ॉल्ट मानकों के साथ अच्छी तरह से स्केल नहीं करता है। जब आप एक वेब सेवा/वेब ऐप बनाते हैं जिसे लिस्टिंग फ़िल्टरिंग का समर्थन करना चाहिए, तो रूट में सभी डिफ़ॉल्ट पैराम को उजागर करने से कोड की पठनीयता और मजबूती कम हो सकती है।अन्य सभी परिदृश्य में यह वास्तव में है पसंदीदा समाधान – natbusa
उत्तर एक सहायक विधि कार्यान्वयन जो आपके लिए उपयोगी हो सकता है के साथ अद्यतन किया है। – lambdas
मैंने डिफ़ॉल्ट पैरामीटर के बारे में अधिक कोड संचालित दृष्टिकोण प्रोग्राम करने के लिए, प्ले फ्रेमवर्क के लिए एक विस्तार का प्रस्ताव दिया है। Https://github.com/playframework/Play20/pull/381 देखें – natbusa