আপনার @POST
পদ্ধতিটি স্ট্রিংয়ের পরিবর্তে একটি JSON অবজেক্ট গ্রহণ করা উচিত। জার্সি জেএএসবি ব্যবহার করে মার্শালিং এবং আনমর্ষশালিং জেএসওএন অবজেক্টগুলিকে সমর্থন করার জন্য ( বিশদে জার্সি ডক্স দেখুন )। এর মতো একটি শ্রেণি তৈরি করুন:
@XmlRootElement
public class MyJaxBean {
@XmlElement public String param1;
@XmlElement public String param2;
}
তাহলে আপনার @POST
পদ্ধতিটি নীচের মত দেখাবে:
@POST @Consumes("application/json")
@Path("/create")
public void create(final MyJaxBean input) {
System.out.println("param1 = " + input.param1);
System.out.println("param2 = " + input.param2);
}
এই পদ্ধতিটি এইচটিটিপি পোস্টের প্রধান হিসাবে JSON অবজেক্ট পাওয়ার প্রত্যাশা করে। জ্যাকস-আরএস এইচটিটিপি বার্তার সামগ্রীর অংশটিকে অযৌক্তিকৃত প্যারামিটার হিসাবে পাস করে - input
এই ক্ষেত্রে। আসল বার্তাটি দেখতে এমন কিছু দেখাচ্ছে:
POST /create HTTP/1.1
Content-Type: application/json
Content-Length: 35
Host: www.example.com
{"param1":"hello","param2":"world"}
এইভাবে JSON ব্যবহার করা সুস্পষ্ট কারণে সাধারণ। তবে আপনি যদি এটি জাভাস্ক্রিপ্ট ব্যতীত অন্য কোনও ক্ষেত্রে উত্পন্ন বা গ্রহণ করছেন, তবে আপনাকে সঠিকভাবে ডেটা এড়িয়ে চলতে সতর্ক হতে হবে। জ্যাকস-আরএসে, আপনি এটি বাস্তবায়নের জন্য একটি বার্তাবডিআডার এবং মেসেজবডিওয়াইটার ব্যবহার করবেন । আমি বিশ্বাস করি যে জার্সির ইতিমধ্যে প্রয়োজনীয় প্রকারের (যেমন, জাভা আদিম এবং জ্যাকএক্সবি মোড়ানো ক্লাস) এবং জেএসওএন এর জন্য বাস্তবায়ন রয়েছে। JAX-RS ডেটা পাস করার জন্য অন্যান্য বেশ কয়েকটি পদ্ধতি সমর্থন করে। সাধারণ আর্গুমেন্ট পাসিং ব্যবহার করে ডেটা পাস হওয়ার কারণে এগুলিকে একটি নতুন শ্রেণি তৈরির প্রয়োজন হয় না।
এইচটিএমএল <FORM>
পরামিতিগুলি @ ফর্মপ্রাম ব্যবহার করে টীকায়িত হবে :
@POST
@Path("/create")
public void create(@FormParam("param1") String param1,
@FormParam("param2") String param2) {
...
}
ব্রাউজারটি "অ্যাপ্লিকেশন / x-www-form-urlencoded" ব্যবহার করে ফর্মটি এনকোড করবে । জ্যাক্স-আরএস রানটাইমটি শরীরের ডিকোডিং এবং এটিকে পদ্ধতিতে পাস করার বিষয়ে যত্ন নেবে। তারে আপনার কী দেখা উচিত তা এখানে:
POST /create HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 25
param1=hello¶m2=world
এই বিষয়বস্তুটি এই ক্ষেত্রে URL টি এনকোডড ।
আপনি যদি ফর্মপার্মের নামগুলি না জানেন তবে আপনি নিম্নলিখিতটি করতে পারেন:
@POST @Consumes("application/x-www-form-urlencoded")
@Path("/create")
public void create(final MultivaluedMap<String, String> formParams) {
...
}
এইচটিটিপি শিরোনাম
আপনি যদি এইচটিটিপি শিরোনামের মাধ্যমে প্যারামিটারগুলি পাস করতে চান তবে আপনি @ হাইডারপ্যারাম টিকাটি ব্যবহার করতে পারেন:
@POST
@Path("/create")
public void create(@HeaderParam("param1") String param1,
@HeaderParam("param2") String param2) {
...
}
এইচটিটিপি বার্তাটি দেখতে কেমন হবে তা এখানে। দ্রষ্টব্য যে এই পোস্টের কোনও শরীর নেই।
POST /create HTTP/1.1
Content-Length: 0
Host: www.example.com
param1: hello
param2: world
আমি সাধারণ পরামিতি পাস করার জন্য এই পদ্ধতিটি ব্যবহার করব না। আপনার যদি কোনও নির্দিষ্ট এইচটিটিপি শিরোনামের মান অ্যাক্সেস করতে হয় তবে তা সত্যিই সহজ।
এইচটিটিপি ক্যোয়ারী প্যারামিটার
এই পদ্ধতিটি প্রাথমিকভাবে এইচটিটিপি জিইটিএস সহ ব্যবহৃত হয় তবে এটি পোষ্টগুলিতে সমানভাবে প্রযোজ্য। এটি @ ক্যুরিপ্যারাম টিকা ব্যবহার করে ।
@POST
@Path("/create")
public void create(@QueryParam("param1") String param1,
@QueryParam("param2") String param2) {
...
}
পূর্ববর্তী কৌশলটির মতো, ক্যোয়ারী স্ট্রিংয়ের মাধ্যমে পরামিতিগুলি পাস করার জন্য কোনও বার্তার বডি প্রয়োজন হয় না। এইচটিটিপি বার্তাটি এখানে:
POST /create?param1=hello¶m2=world HTTP/1.1
Content-Length: 0
Host: www.example.com
ক্লায়েন্টের পক্ষ থেকে ক্যোয়ারী প্যারামিটারগুলি সঠিকভাবে এনকোড করার জন্য আপনাকে বিশেষভাবে যত্নবান হতে হবে । কিছু প্রক্সির দ্বারা প্রয়োগ করা URL দৈর্ঘ্যের বিধিনিষেধগুলির পাশাপাশি এনকোডিং সম্পর্কিত সমস্যাগুলির কারণে ক্যোয়ারী প্যারামিটারগুলি ব্যবহার করা সমস্যাযুক্ত হতে পারে।
এইচটিটিপি পথের পরামিতি
পাথ প্যারামিটারগুলি কোয়েরি প্যারামিটারগুলির মতো যা তারা এইচটিটিপি রিসোর্স পাথে এমবেড করা ব্যতীত। এই পদ্ধতিটি আজ পক্ষে রয়েছে বলে মনে হয়। এইচটিটিপি ক্যাচিংয়ের ক্ষেত্রে প্রভাব রয়েছে কারণ এই পথটিই সত্যই এইচটিটিপি সংস্থার সংজ্ঞা দেয়। @ পাথ টীকা সংশোধন করা হয়েছে এবং এটি @ পাথপারাম ব্যবহার করে : কোডটি অন্যদের থেকে কিছুটা আলাদা দেখাচ্ছে
@POST
@Path("/create/{param1}/{param2}")
public void create(@PathParam("param1") String param1,
@PathParam("param2") String param2) {
...
}
মেসেজটি ক্যোয়ারী প্যারামিটার সংস্করণের অনুরূপ ব্যতীত প্যারামিটারগুলির নাম বার্তায় কোথাও অন্তর্ভুক্ত করা হয়নি।
POST /create/hello/world HTTP/1.1
Content-Length: 0
Host: www.example.com
এই পদ্ধতিটি একই এনকোডিংয়ের ঝামেলা ভাগ করে যা ক্যোয়ারী প্যারামিটার সংস্করণ। পাথ বিভাগগুলি আলাদাভাবে এনকোড করা হয়েছে যাতে আপনারও সেখানে যত্নবান হতে হবে।
যেমন আপনি দেখতে পাচ্ছেন, প্রতিটি পদ্ধতির পক্ষে বিভিন্ন মতামত রয়েছে। পছন্দটি সাধারণত আপনার ক্লায়েন্টদের দ্বারা সিদ্ধান্ত নেওয়া হয়। আপনি যদি FORM
ভিত্তিক এইচটিএমএল পৃষ্ঠাগুলি পরিবেশন করে থাকেন তবে ব্যবহার করুন @FormParam
। যদি আপনার ক্লায়েন্টগুলি জাভাস্ক্রিপ্ট + এইচটিএমএল 5 ভিত্তিক হয় তবে আপনি সম্ভবত জ্যাকএক্সবি ভিত্তিক সিরিয়ালাইজেশন এবং জেএসএন অবজেক্ট ব্যবহার করতে চাইবেন। MessageBodyReader/Writer
বাস্তবায়নের যাতে এক কম জিনিস ভুল হয়ে যেতে পারে যে প্রয়োজনীয় আপনার জন্য পলায়নের যত্ন নিতে হবে। যদি আপনার ক্লায়েন্ট জাভা ভিত্তিক তবে কোনও ভাল এক্সএমএল প্রসেসর না থাকে (যেমন, অ্যান্ড্রয়েড), তবে আমি সম্ভবত FORM
এনকোডিংটি ব্যবহার করবো কারণ যেহেতু কোনও সামগ্রী বডিটি ইউআরএলগুলির চেয়ে সঠিকভাবে উত্পন্ন করা এবং এনকোড করা সহজ। আশা করা যায় যে এই মিনি-উইকির এন্ট্রি জ্যাকস-আরএস সমর্থন করে এমন বিভিন্ন পদ্ধতি সম্পর্কে কিছুটা আলোকপাত করবে।
দ্রষ্টব্য: সম্পূর্ণ প্রকাশের স্বার্থে, আমি আসলে জার্সির এই বৈশিষ্ট্যটি ব্যবহার করি নি। আমরা বেশিরভাগ জ্যাকএক্সবি + জ্যাকস-আরএস অ্যাপ্লিকেশন স্থাপন করে এবং মোবাইল ক্লায়েন্টের স্পেসে চলে যাচ্ছি বলে আমরা এটির সাথে কথা বলছিলাম। এইচএমএল 5 বা জিক্যুরি-ভিত্তিক সমাধানগুলিতে এক্সএমএল জেএসএন আরও অনেক বেশি ফিট।