@RequestBody এবং @ResponseBody বসন্তে টীকাগুলি


139

কেউ স্প্রিং 3 এ @RequestBodyএবং @ResponseBodyটীকাগুলি ব্যাখ্যা করতে পারেন ? কি জন্য তারা? কোন উদাহরণ দুর্দান্ত হবে।

উত্তর:


219

ডক্সে একটি সম্পূর্ণ বিভাগ রয়েছে যার নাম 16.3.3.4 @ রিকোয়েস্টবিডি টীকা দিয়ে অনুরোধের বডিটি ম্যাপিং করা হচ্ছে । এবং যাকে একটি বলা হয়েছে 16.3.3.5 @ রেসপনসবডি টীকা দিয়ে প্রতিক্রিয়া বডি ম্যাপিং । আমি আপনাকে এই বিভাগগুলি পরামর্শ পরামর্শ দিচ্ছি। প্রাসঙ্গিক: @RequestBodyজাভাডোকস, @ResponseBodyজাভাদোকস

ব্যবহারের উদাহরণগুলি এরকম কিছু হবে:

JQuery এর মতো একটি জাভাস্ক্রিপ্ট-লাইব্রেরি ব্যবহার করে আপনি এই জাতীয় একটি JSON- অবজেক্ট পোস্ট করবেন:

{ "firstName" : "Elmer", "lastName" : "Fudd" }

আপনার নিয়ামক পদ্ধতিটি দেখতে এমন হবে:

// controller
@ResponseBody @RequestMapping("/description")
public Description getDescription(@RequestBody UserStats stats){
    return new Description(stats.getFirstName() + " " + stats.getLastname() + " hates wacky wabbits");
}

// domain / value objects
public class UserStats{
    private String firstName;
    private String lastName;
    // + getters, setters
}
public class Description{
    private String description;
    // + getters, setters, constructor
}

এখন যদি আপনার ক্লাসপথে জ্যাকসন থাকে (এবং একটি <mvc:annotation-driven>সেটআপ থাকে), স্প্রিং আগত জেএসওএনকে পোস্ট বডি থেকে ইউজারস্ট্যাটস অবজেক্টে রূপান্তরিত করবে (কারণ আপনি @RequestBodyটীকা যুক্ত করেছেন ) এবং এটি জেএসএনে প্রত্যাবর্তিত বস্তুকে সিরিয়ালাইজ করবে (কারণ আপনি যোগ করেছেন @ResponseBodyটীকা)। সুতরাং ব্রাউজার / ক্লায়েন্ট এই JSON ফলাফলটি দেখতে পাবে:

{ "description" : "Elmer Fudd hates wacky wabbits" }

সম্পূর্ণ কাজের উদাহরণের জন্য আমার এই পূর্ববর্তী উত্তরটি দেখুন: https://stackoverflow.com/a/5908632/342852

দ্রষ্টব্য: রিকোস্টবিডি / রেসপন্সবিডি অবশ্যই জেএসএনের মধ্যে সীমাবদ্ধ নয়, উভয়ই সরল পাঠ্য এবং এক্সএমএল সহ একাধিক ফর্ম্যাট পরিচালনা করতে পারে তবে জেএসএন সম্ভবত সর্বাধিক ব্যবহৃত ফর্ম্যাট।


হালনাগাদ

বসন্ত x.০ এর পর থেকে আপনি সাধারণত @ResponseBodyপদ্ধতি স্তরে ব্যবহার করবেন না , বরং @RestControllerএকই প্রভাব সহ ক্লাস স্তরে ব্যবহার করবেন না ।

এখানে স্প্রিং এমভিসি অফিশিয়াল ডকুমেন্টেশনের একটি উদ্ধৃতি দেওয়া হয়েছে :

@RestControllerএকটি হল ক্ষান্ত টীকা যে নিজেই মেটা-সটীক সঙ্গে @Controllerএবং @ResponseBodyএকটি নিয়ামক যার প্রত্যেক পদ্ধতি টাইপ পর্যায়ের উত্তরাধিকারী ইঙ্গিত @ResponseBodyটীকা এবং, অতএব, দৃশ্য রেজল্যুশন বনাম প্রতিক্রিয়া শরীর থেকে সরাসরি লিখেছেন এবং একটি HTML টেমপ্লেট দিয়ে রেন্ডারিং।


আপনার লিঙ্কযুক্ত উত্তরে, আপনি @ResponseBodyপ্যারামিটারটিতে টীকাটি ব্যবহার করেছেন , পদ্ধতিটি নয়। এটি পদ্ধতিতে রাখার চেষ্টা করে আমি ত্রুটি পেয়েছি, সুতরাং আমি আপনার অন্য উত্তরটি সঠিক বলে ধরে নিচ্ছি। আমি মনে করি আপনার getDescription(@RequestBody UserStats stats)উপরে থাকা উচিত ।
প্যাট্রিক

3
@ পেট্রিক নং, @RequestBodyপ্যারামিটারে রয়েছে, @ResponseBodyপদ্ধতিটিতে রয়েছে। গুরুত্বপূর্ণ পার্থক্য!
শন প্যাট্রিক ফ্লয়েড

1
@ সানপ্যাট্রিকফ্লাইড দুঃখিত, আমি মোটেও উল্লেখ @ResponseBodyকরার অর্থ চাইনি । আপনি যেমন বলেছিলেন, ঠিক আছে, @RequestBodyপ্যারামিটারে যায়? তবে উপরের উত্তরে, আপনার পদ্ধতিতে এটি রয়েছে।
প্যাট্রিক

1
@ সানপ্যাট্রিকফ্লয়েড @RequestBodyআসলে এখনও প্রয়োজনীয়, @ResponseBodyব্যবহারের সময় নিখুঁত @RestController। দয়া করে আপনার উত্তরটি সংশোধন করুন, এটির মিথ্যা হতে অনেকগুলি আপভোস্ট রয়েছে!
সুমিত জৈন

@ সুমিতজাইন ন্যায্য হতে: এই উত্তরটি আগেই @RestControllerছিল এবং এটি চালু হওয়ার সাথে সাথে পরিবর্তন করা হয়েছিল
সান প্যাট্রিক ফ্লয়েড

32

@ রিকোয়েস্টবাডি : কোনও পদ্ধতি প্যারামিটারকে নির্দেশিত টিকাটি এইচটিটিপি অনুরোধের শৃঙ্খলে আবদ্ধ হওয়া উচিত।

উদাহরণ স্বরূপ:

@RequestMapping(path = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body, Writer writer) throws IOException {
    writer.write(body);
}

@ রেসপন্সবিডি টীকাটি কোনও পদ্ধতিতে লাগানো যেতে পারে এবং নির্দেশ দেয় যে রিটার্নের ধরণটি সরাসরি HTTP প্রতিক্রিয়া সংস্থায় লিখতে হবে (এবং কোনও মডেলতে রাখা হয় না, বা ভিউ নাম হিসাবে ব্যাখ্যা করা হয়)।

উদাহরণ স্বরূপ:

@RequestMapping(path = "/something", method = RequestMethod.PUT)
public  @ResponseBody String helloWorld() {
    return "Hello World";
}  

বিকল্পভাবে, আমরা টীকাগুলির জায়গায় @ রিস্টকন্ট্রোলার টীকাটি ব্যবহার করতে পারি @Controller। এটি ব্যবহারের প্রয়োজনীয়তা সরিয়ে ফেলবে @ResponseBody

আরো বিস্তারিত জানার জন্য


5

নীচে একটি জাভা নিয়ামকের একটি পদ্ধতির উদাহরণ রয়েছে।

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public HttpStatus something(@RequestBody MyModel myModel) 
{
    return HttpStatus.OK;
}

@RequestBody টীকাটি ব্যবহার করে আপনি কোনও নির্দিষ্ট কল পরিচালনা করার জন্য আপনার সিস্টেমে যে মডেলটি তৈরি করেছেন তার সাথে মানগুলি ম্যাপ করতে পারবেন। @ রেসপন্সবডি ব্যবহার করার সময় আপনি যে কোনও জায়গা থেকে অনুরোধটি উত্পন্ন হয়েছিল সেখানে ফিরে কিছু পাঠাতে পারবেন। উভয় জিনিস কোনও কাস্টম পার্সার ইত্যাদি না লিখে সহজেই ম্যাপ করা হবে


1
package com.programmingfree.springshop.controller;

import java.util.List;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.programmingfree.springshop.dao.UserShop;
import com.programmingfree.springshop.domain.User;


@RestController
@RequestMapping("/shop/user")
public class SpringShopController {

 UserShop userShop=new UserShop();

 @RequestMapping(value = "/{id}", method = RequestMethod.GET,headers="Accept=application/json")
 public User getUser(@PathVariable int id) {
  User user=userShop.getUserById(id);
  return user;
 }


 @RequestMapping(method = RequestMethod.GET,headers="Accept=application/json")
 public List<User> getAllUsers() {
  List<User> users=userShop.getAllUsers();
  return users;
 }


}

উপরের উদাহরণে তারা সমস্ত ব্যবহারকারী এবং নির্দিষ্ট আইডি বিবরণ প্রদর্শন করতে চলেছে এখন আমি আইডি এবং নাম উভয়ই ব্যবহার করতে চাই,

1) লোকালহোস্ট: 8093 / প্লিজসন / শপ / ইউজার <--- এই লিঙ্কটি ব্যবহারকারীর সমস্ত বিবরণ প্রদর্শন করবে
2) লোকালহোস্ট: 8093 / পিলেজসন / শপ / ইউজার / ১১ <---- আমি যদি লিঙ্কের মাধ্যমে 11 ব্যবহার করি তবে এটি হবে নির্দিষ্ট 11 ব্যবহারকারীর বিবরণ প্রদর্শন করুন

এখন আমি আইডি এবং নাম উভয়ই ব্যবহার করতে চাই

লোকালহোস্ট: 8093 / প্লিজসন / শপ / ইউজার / 11 / রাজু <----------------- এর অর্থ এর অর্থ আমরা এর মধ্যে যে কোনও একটিকে ব্যবহার করতে পারি দয়া করে আমাকে সহায়তা করুন .... ।


উত্তর এবং কোড নমুনার বিন্যাসটি সঠিক করুন।
ম্যাকিয়েজ লাচ

এই কোডটি প্রশ্নকারীকে কীভাবে সহায়তা করে দয়া করে তা বর্ণনা করুন। ধন্যবাদ.
লিওনিড গ্লানজ


প্রোগ্রামিং- ফ্রি.কম / ২০১৪ / ২০১৩ / ......... ....................................... .................................................. ..... এই লিঙ্কটি দিয়ে যান আপনি ধন্যবাদ পাবেন
ব্যবহারকারীর 40409646
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.