বসন্ত 3 এমভিসি নিয়ামক থেকে এইচটিপিআরকিউয়েস্ট অ্যাক্সেস করে


104

@SessionAttributesউদাহরণস্বরূপ কুকিজ হ্যান্ডলিংয়ের জন্য আমি অনুরোধ এবং সেশনের বৈশিষ্ট্যগুলি নিজেই পরিচালনা করতে চাই তবে তা বসন্তে রেখে দিন ।

আমি ঠিক কীভাবে HttpRequestনিয়ন্ত্রণকারীর মধ্যে থেকে অ্যাক্সেস করতে পারি তা বুঝতে পারি না , আমার উপরে একটি স্তর যেতে @RequestAttributeএবং HttpRequestনিজেই অ্যাক্সেস করার জন্য আমার একটি উপায় প্রয়োজন । স্ট্রিপগুলি ব্যবহার করে এটি প্রয়োগ করে ApplicationContextএবং কল করে getAttribute()

এছাড়াও, HttpServletRequestপ্যারামিটার হিসাবে পাস করা মনে হচ্ছে কাজ করছে না:

@RequestMapping(value="/") public String home(HttpServletRequest request){
    System.out.println(""+request.getSession().getCreationTime());
    return "home"; 
}

উপরের পদ্ধতিটি কিছু মুদ্রণ করে না।

আপনার এই সম্পর্কে কোন পরামর্শ আছে?

উত্তর:


184

স্প্রিং এমভিসি আপনি যদি আপনার নিয়ামক পদ্ধতির স্বাক্ষরে কেবল এটি যুক্ত করেন তবে আপনাকে এইচটিটিপিআরকেস্ট দেবে:

এই ক্ষেত্রে:

/**
 * Generate a PDF report...
 */
@RequestMapping(value = "/report/{objectId}", method = RequestMethod.GET)
public @ResponseBody void generateReport(
        @PathVariable("objectId") Long objectId, 
        HttpServletRequest request, 
        HttpServletResponse response) {

    // ...
    // Here you can use the request and response objects like:
    // response.setContentType("application/pdf");
    // response.getOutputStream().write(...);

}

যেমন আপনি দেখতে পাচ্ছেন, কেবল স্বাক্ষরটিতে HttpServletRequestএবং HttpServletResponseঅবজেক্টগুলি যুক্ত করা স্প্রিং এমভিসিটিকে আপনার নিয়ামক পদ্ধতিতে সেই বিষয়গুলি পাস করার জন্য তৈরি করে। আপনি HttpSessionঅবজেক্টটিও চাইবেন ।

সম্পাদনা: দেখে মনে হচ্ছে এইচটিপিএস সার্লেটআরকোয়েস্ট / রেসপন্স স্প্রিং ৩ এর অধীনে কিছু লোকের জন্য কাজ করছে না। এডুয়ার্ডো জোলা ইঙ্গিত করার সাথে সাথে স্প্রিং ওয়েবরেকুইস্ট / ওয়েবরেস্পোনস অবজেক্ট ব্যবহার করার চেষ্টা করুন।

আমি আপনাকে দৃ supported ়ভাবে পরামর্শ দিচ্ছি যে সমর্থিত যুক্তিগুলির তালিকাটি একবার স্পষ্ট করে দেখুন যে স্প্রিং এমভিসি আপনার হ্যান্ডলার পদ্ধতিতে স্বয়ংক্রিয়ভাবে যাদুতে ইনজেক্ট করতে সক্ষম।


হাই, ইঙ্গিতগুলির জন্য, আমি জানি না আমি কী ভুল করছি কিন্তু এটি কাজ করছে না: এটি কোনও কিছুই মুদ্রণ করে না: @RequestMapping (মান = "/") পাবলিক স্ট্রিং হোম (এইচটিটিপি সার্ভলেটর অনুরোধ) {System.out। println ( "" + + request.getSession () getCreationTime ()।); বাড়িতে ফিরে"; } এটি বর্তমান পরিমাণে পোফ মিলিসকে মূল্য দিতে পারে তবে এটি @RequestBody এর সাথেও পদ্ধতিটি বর্ণনা করে কিছু পরিবর্তন করে না, আরও কোনও পরামর্শ? এর জন্য
THX

2
স্প্রিং এমভিসির সমর্থিত যুক্তিগুলির লিঙ্কের জন্য @ jjmontes ধন্যবাদ!
বেরেট

আমি স্প্রিং সম্পর্কে কিছুই জানি না, তবে @Contextসেগুলিতে ইনজেকশন দেওয়ার জন্য যুক্তির আগে টীকাটি যুক্ত করতে হয়েছিল। আমি নতুন কিছু হতে পারে, তবে আমি বুঝতে পেরেছি mention
ivarni

81

আমি জানি এটি একটি পুরানো প্রশ্ন, কিন্তু ...

আপনি এটি আপনার শ্রেণিতেও ব্যবহার করতে পারেন:

@Autowired
private HttpServletRequest context;

এবং HttpServletRequestএটি আপনার পদ্ধতিতে আপনার ব্যবহারের বর্তমান উদাহরণ সরবরাহ করবে ।


7
এভাবে নিয়ন্ত্রক শিমকে সিঙ্গলটন হতে আটকাচ্ছে না?
jjmontes

2
স্প্রিং কন্ট্রোলাররা সর্বদা সিলেটলেট থাকে।
দেবিদি কাভারজান

16
এটি ভুল অনুভব করে - যদি নিয়ামক নির্দিষ্ট সময়ে একাধিক অনুরোধ পরিচালনা করছেন? "বর্তমান" অনুরোধ কি তখন?
এসবিকে

2
এই প্রশ্নের জন্য বলছি আপনার সম্পর্কে কিছু ব্যাখ্যা আছে stackoverflow.com/questions/17235794/...
Deividi Cavarzan

1
getThreadLocalRequest()জিডব্লিউটি'র মতো এমন কিছু পাওয়া বেশ RemoteServiceServletকার্যকর হবে যা অত্যন্ত সহবর্তী পরিবেশে কার্যকর করা হলেও সর্বদা সঠিক অনুরোধটি ফেরত দেয়।
ইউরি নাকনটেকায়ি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.