স্প্রিং এমভিসি REST নিয়ামকটিতে কীভাবে এইচটিটিপি শিরোনাম তথ্যে অ্যাক্সেস পাবেন?


154

আমি সাধারণভাবে ওয়েব প্রোগ্রামিংয়ে নতুন, বিশেষত জাভাতে নতুন, তাই আমি কেবল শিরোনাম এবং শরীর কী তা শিখেছি।

আমি স্প্রিং এমভিসি ব্যবহার করে RESTful পরিষেবাদি লিখছি। আমি @RequestMappingআমার কন্ট্রোলারগুলিতে সাধারণ পরিষেবাগুলি তৈরি করতে সক্ষম হয়েছি । আমার REST পরিষেবা নিয়ামকটিতে আমার পদ্ধতিতে আসা একটি অনুরোধ থেকে কীভাবে এইচটিটিপি শিরোনামের তথ্য পাবেন তা বুঝতে আমার সহায়তা দরকার need আমি শিরোনামটি বিশ্লেষণ করতে এবং এটি থেকে কিছু বৈশিষ্ট্য পেতে চাই।

আপনি কীভাবে ব্যাখ্যা করতে পারেন যে আমি কীভাবে এই তথ্যটি পেতে চলেছি?

উত্তর:


263

আপনি যখন কোনও প্যারামিটারটি বেনিফিট করেন তখন @RequestHeaderপ্যারামিটার শিরোনামের তথ্য পুনরুদ্ধার করে। সুতরাং আপনি এই জাতীয় কিছু করতে পারেন:

@RequestHeader("Accept")

Acceptশিরোনাম পেতে ।

সুতরাং ডকুমেন্টেশন থেকে :

@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,
                              @RequestHeader("Keep-Alive") long keepAlive)  {

}

Accept-Encodingএবং Keep-Aliveহেডার মান প্রদান করা হয় encodingএবং keepAliveযথাক্রমে প্যারামিটার।

এবং কোন উদ্বেগ নেই। আমরা সকলেই কিছু না কিছু করিয়া আছি।


ধন্যবাদ. আমি যে সংস্থার জন্য কাজ করি তার কয়েকটি কোড উদাহরণগুলিতে, আমি প্যারামিটার হিসাবে HttpServletRequest দেখি এবং এটিতে একটি getHeader পদ্ধতি রয়েছে। কোন পদ্ধতির পছন্দ হয়?
ঘোড়া ভয়েস

1
কোনও এপিআই-এর নিম্ন-স্তরের বিশদগুলিতে বিমূর্ততা পছন্দ করুন। আমি স্প্রিং এমভিসি এর পরিবর্তে Servletএপিআইয়ের বিশদটি সরিয়ে ফেলতে চাই । আমি অনুরোধটি থেকে আমার যা প্রয়োজন তা টানতে টীকাগুলি ব্যবহার করতে পারি।
বিদ্যা

6
উল্লেখ করা উচিত, অনুরোধের মধ্যে যদি শিরোনাম না থাকে তবে আপনি প্রতিক্রিয়া হিসাবে একটি 400 বাজে অনুরোধ ত্রুটি পাবেন। : আরো নমনীয় ভাবে বর্ণনা অনুযায়ী অনুরোধ হেডার থেকে সরাসরি প্রবেশাধিকার হয় stackoverflow.com/a/28209710/1828296
lospejos

আমি অনুমান করি এটি আপনি কী করতে চান তার উপর নির্ভর করে তবে 400 প্রতিক্রিয়া হ'ল সেই ক্ষেত্রে আমি প্রায় সবসময়ই চাই behavior
বিদ্যা

এই requiredজাতীয় পতাকা ব্যবহার করে এড়ানো যেতে পারে @RequestHeader(name = "Keep-Alive", required = false) long keepAliveএমন লস্পিজোগুলি সরবরাহ না করা থাকলে ক্যাপলাইভটি বাতিল করে দেবে। রয়েছে defaultValueক্ষেত্র টীকার জন্য docs.spring.io/spring-framework/docs/5.0.7.RELEASE/javadoc-api/...
Niccolò

88

সমস্ত অনুরোধ শিরোনাম অ্যাক্সেস পেতে আপনি পদ্ধতি প্যারামিটার @RequestHeaderসহ টিকাটি ব্যবহার করতে পারেন HttpHeaders:

@RequestMapping(value = "/restURL")
public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers) {
    // Use headers to get the information about all the request headers
    long contentLength = headers.getContentLength();
    // ...
    StreamSource source = new StreamSource(new StringReader(body));
    YourObject obj = (YourObject) jaxb2Mashaller.unmarshal(source);
    // ...
}

Http র অনুরোধের বডি সম্পর্কে কী? আমি কীভাবে শিরোনামের সুনির্দিষ্ট অ্যাক্সেস করব? আপনি কি আমাকে ব্যাখ্যা করতে পারেন যদি এইচটিপিএইচডার্স এমন মানচিত্র যা অ্যাক্সেসের জন্য আমার কী প্রয়োজন?
ঘোড়া ভয়েস

এইচটিপিএইচইডারদের শিরোনামের সুনির্দিষ্ট বিবরণ পেতে গিটার রয়েছে। আপনি বিশদটি পেতে এই লিঙ্কটি অন্বেষণ করতে পারেন: ডকসস.স্প্রিং.ইউ
সাইকিয়া

আপনি কীভাবে অনুরোধের বডিটিতে অ্যাক্সেস পেতে পারেন তা জানাতে আমার উত্তর সম্পাদনা করেছে।
দেবোজিৎ সাইকিয়া

1
স্ট্রোসোর্সের দরকার কেন? এটা খুব জটিল বলে মনে হচ্ছে। স্ট্রিম ইত্যাদির ব্যবহারের চেয়ে আরও সহজ উপায় থাকতে হবে
ঘোড়া ভয়েস

এখানে StringReaderআগত চরিত্রের স্ট্রিমটি পড়তে ব্যবহৃত হয়। StreamSourceএক্সএমএল মার্কআপের একটি স্ট্রিমের আকারে রূপান্তর উত্সের ধারক হিসাবে কাজ করে।
দেবোজিৎ সাইকিয়া

14

উদাহরণস্বরূপ শিরোলেখের পরামিতিগুলিতে আমার সমাধানটি ব্যবহারকারী = "পরীক্ষা" হ'ল:

@RequestMapping(value = "/restURL")
  public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers){

System.out.println(headers.get("user"));
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.