স্প্রিং এমভিসি @চ্ছিক পরামিতিগুলি পরিচালনা করে @ রিকোয়েস্টপ্যারাম


185

বসন্ত নিয়ামকের পক্ষে উভয় ধরণের অনুরোধ পরিচালনা করা কি সম্ভব?

1) http://localhost:8080/submit/id/ID123432?logout=true

2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432

যদি আমি এই ধরণের একক নিয়ামককে সংজ্ঞায়িত করি:

 @RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,   
 produces="text/xml")
public String showLoginWindow(@PathVariable("id") String id,
                              @RequestParam(value = "logout", required = false) String logout,
                              @RequestParam("name") String username,
                              @RequestParam("password") String password,
                              @ModelAttribute("submitModel") SubmitModel model,
                              BindingResult errors) throws LoginException {...}

"লগআউট" সহ এইচটিটিপি অনুরোধ গৃহীত হয় না।

আমি যদি প্রতিটি অনুরোধকে পৃথকভাবে পরিচালনা করতে দুটি নিয়ামককে সংজ্ঞায়িত করি তবে স্প্রিং "ইতিমধ্যে 'কন্ট্রোলার' শিম পদ্ধতিটি রয়েছে ... ম্যাপ করা হয়েছে" ব্যতিক্রমের সাথে অভিযোগ করে।


2
এই নিবন্ধটি পড়ুন: কোড flex.co/…
ybonda

উত্তর:


224

আপনি দিতে হবে required = falseজন্য nameএবং passwordঅনুরোধ মাপকাঠিগুলি হিসাবে ভাল। কারণ, যখন আপনি কেবলমাত্র logoutপ্যারামিটার সরবরাহ করেন, এটি আসলে প্রত্যাশা করে nameএবং passwordপাশাপাশি তারা এখনও বাধ্যতামূলক।

আপনি যখন সবে দিয়েছেন তখন এটি কাজ করেছিল nameএবং passwordকারণ ইতিমধ্যে প্রদত্ত logoutকোনও বাধ্যতামূলক প্যারামিটারের জন্য ধন্যবাদ ছিল না ।required = falselogout


167

এর অংশ হিসাবে Spring 4.1.1আপনার এখন জাভা 8 Optional( আসল টিকিট ) এর সম্পূর্ণ সমর্থন রয়েছে সুতরাং আপনার উদাহরণে উভয় অনুরোধগুলি আপনার একক ম্যাপিং শেষ পয়েন্টের মধ্য দিয়ে যাবে যতক্ষণ আপনি required=falseআপনার 3 টি প্যারাম লগআউট, নাম, পাসওয়ার্ডের জন্য alচ্ছিক সাথে প্রতিস্থাপন করবেন:

@RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,   
 produces="text/xml")
public String showLoginWindow(@PathVariable("id") String id,
                              @RequestParam(value = "logout") Optional<String> logout,
                              @RequestParam("name") Optional<String> username,
                              @RequestParam("password") Optional<String> password,
                              @ModelAttribute("submitModel") SubmitModel model,
                              BindingResult errors) throws LoginException {...}

2
@ বিভাভ চাদ্দা আপনি এরকম কিছু ব্যবহার করতে পারেন: যদি (idOfUser.isPstream ())। System.out.println ("idOfUser:" + idOfUser.get ()); }
ক্যাসিও সেফরিন

10
ইন্টেলিজ সতর্কতা: '<চ্ছিক <লং>' প্যারামিটারের জন্য টাইপ হিসাবে ব্যবহৃত হয়েছে 'অনুরোধিত টাইমলাইনস্টার্ট' কম ... (স্ট্রাগ + এফ 1) পরিদর্শন তথ্য: java.util.Optional <T>, java.util.OptionalDouble, java এর কোনও ব্যবহারের প্রতিবেদন করে। ক্ষেত্র বা প্যারামিটারের প্রকার হিসাবে utilচ্ছিক .চ্ছিক আইটেম, java.util.OptionalLong বা com.google.common.base Oচ্ছিক। Libraryচ্ছিকটি লাইব্রেরি পদ্ধতিতে রিটার্ন টাইপের ক্ষেত্রে সীমিত ব্যবস্থা দেওয়ার জন্য ডিজাইন করা হয়েছিল যেখানে "কোনও ফলাফল নয়" উপস্থাপনের জন্য একটি সুস্পষ্ট উপায় থাকা দরকার। Java.util.Optal টাইপযুক্ত ক্ষেত্রটি ব্যবহার করাও সমস্যাযুক্ত যদি শ্রেণিটি সিরিয়ালাইজেবল হতে হয়, যা java.util.Optal নয়।
পেমা

আমি বিশ্বাস করি জাভা 8 এর সাথে এটি নতুন সঠিক উত্তর হওয়া উচিত।
java-addict301

40

কেসগুলি পরিচালনা করে এমন 2 টি পদ্ধতি তৈরি করুন। @RequestMappingঅনুরোধটি ম্যাপ করার সময় আপনি নির্দিষ্ট প্যারামিটারগুলিকে বিবেচনায় আনতে রচনার নির্দেশ দিতে পারেন। এইভাবে আপনি 2 টি পদ্ধতিতে দুর্দান্তভাবে এটি বিভক্ত করতে পারেন।

@RequestMapping (value="/submit/id/{id}", method=RequestMethod.GET, 
                 produces="text/xml", params={"logout"})
public String handleLogout(@PathVariable("id") String id, 
        @RequestParam("logout") String logout) { ... }

@RequestMapping (value="/submit/id/{id}", method=RequestMethod.GET, 
                 produces="text/xml", params={"name", "password"})
public String handleLogin(@PathVariable("id") String id, @RequestParam("name") 
        String username, @RequestParam("password") String password, 
        @ModelAttribute("submitModel") SubmitModel model, BindingResult errors) 
        throws LoginException {...}

1
যখন কেউ ইউআরএলতে লগআউট, নাম এবং পাসওয়ার্ড দুটি পাস করে তখন কী হবে? শুধু ডকুমেন্টেশন পড়ুন, এটি বলেছে !myParam style expressions indicate that the * specified parameter is not supposed to be present in the request.যে চেষ্টা করা উচিত।
রিং বাহক

2
এটি সেরা ম্যাচটি সন্ধান করবে, এটি সম্ভবত handleLoginঅন্যটি ব্যবহার করার চেষ্টা করবে অন্য কোনও ম্যাপিং পাওয়া যাবে না উল্লেখ করে এটি একটি ব্যতিক্রম দেবে।
এম। ডিনুম

3
কেবল একটি নোট: সুরক্ষা দৃষ্টিকোণ থেকে লগআউটে কেবল পোস্ট অনুরোধগুলি গ্রহণ করা উচিত, সুতরাং 2 টি পদ্ধতি থাকতে হবে এবং তখন তাদের ইউআরএল একই রাখার কোনও মানে হয় না।
রু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.