বসন্ত @ কন্ট্রোলার এবং @ রিস্টকন্ট্রোলার টীকাগুলির মধ্যে পার্থক্য


356

বসন্ত @Controllerএবং @RestControllerটীকাগুলির মধ্যে পার্থক্য ।

@Controllerওয়েব এমভিসি এবং REST অ্যাপ্লিকেশন উভয়ের জন্য কি টিকা ব্যবহার করা যেতে পারে?
যদি হ্যাঁ হয় তবে এটি কীভাবে ওয়েব এমভিসি বা REST অ্যাপ্লিকেশন হয় তা আমরা আলাদা করতে পারি।

উত্তর:


471
  • @Controller ক্লাসগুলি স্প্রিং এমভিসি কন্ট্রোলার হিসাবে চিহ্নিত করতে ব্যবহৃত হয়।
  • @RestControllerসুবিধাযুক্ত টীকা যা হ'ল টীকা @Controllerএবং @ResponseBodyটীকা যুক্ত করা ছাড়া আর কিছুই করে না (দেখুন: জাভাদোক )

সুতরাং নিম্নলিখিত দুটি নিয়ামক সংজ্ঞা একই কাজ করা উচিত

@Controller
@ResponseBody
public class MyController { }

@RestController
public class MyRestController { }


48
আমি মনে করি @ রিস্টকন্ট্রোলার জেএসএন / এক্সএমএলের প্রতিক্রিয়াটি স্বয়ংক্রিয়ভাবে রূপান্তর করে।
অর্ণবকায়সি

1
স্রেফ স্প্রিং টিউটোরিয়ালের একটি লিঙ্ক ভাগ করে নিচ্ছি
মিনা সামি

9
এছাড়াও আপনি যদি টেমপ্লেট ইঞ্জিন ব্যবহার করেন তবে Thymeleafএটি এর সাথে কাজ করবে না যার @RestControllerকারণে @ResponseBodyএই টীকায় অন্তর্ভুক্ত রয়েছে।
সোনিক

3
@ResponseBodyপ্রত্যাবর্তিত বস্তুগুলিকে এমন কিছুতে পরিণত করে যা শরীরে থাকতে পারে, যেমন জেএসএন বা এক্সএমএল ( উত্স )
মার্টিন থোমা

59

নীচের কোডে আমি আপনাকে পার্থক্যটি দেখাব @controller

@Controller
public class RestClassName{

  @RequestMapping(value={"/uri"})
  @ResponseBody
  public ObjectResponse functionRestName(){
      //...
      return instance
   }
}

এবং @RestController

@RestController
public class RestClassName{

  @RequestMapping(value={"/uri"})
  public ObjectResponse functionRestName(){
      //...
      return instance
   }
}

@ResponseBodyডিফল্টরূপে সক্রিয় করা হয়। আপনার এটি ফাংশনের স্বাক্ষরের উপরে যুক্ত করার দরকার নেই।


1
জাভাতে শ্রেণীর নামগুলি মূলধন হিসাবে শুরু করা উচিত, যেমন রেস্টক্লাসনাম (রেস্টক্লাসনাম নয়)।
রাজ্জেল

24

আপনি যদি ব্যবহার করেন তবে আপনি @RestControllerকোনও দর্শন ( Viewresolverস্প্রিং / স্প্রিংবুটে ব্যবহার করে ) ফিরিয়ে দিতে পারবেন না @ResponseBodyএবং এই ক্ষেত্রে হ্যাঁ দরকার নেই।

আপনি যদি ব্যবহার করেন তবে @Controllerআপনি স্প্রিং ওয়েব এমভিসিতে একটি দৃশ্য ফিরে আসতে পারেন।


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


14

প্রকৃতপক্ষে, সাবধান হন - এগুলি হুবহু এক নয়।

আপনি যদি আপনার অ্যাপ্লিকেশনের মধ্যে কোনও ইন্টারসেপ্টর সংজ্ঞায়িত করেন @RestControllerতবে এগুলি এনোটোটেড কন্ট্রোলারের ক্ষেত্রে প্রযোজ্য হবে না , তবে তারা @Controllerটীকাযুক্ত নিয়ন্ত্রকদের সাথে কাজ করে ।

অর্থাত। ইন্টারসেপ্টারের জন্য কনফিগারেশন:

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TemplateMappingInterceptor()).addPathPatterns("/**", "/admin-functions**").excludePathPatterns("/login**");
    }

}

এবং একটি বসন্ত নিয়ামকের ঘোষণায়:

@Controller
public class AdminServiceController {...

তবে কাজ করবে

@RestController
public class AdminServiceController {...

ইন্টারসেপ্টারের সাথে যুক্ত হওয়ার সাথে এটি শেষ হয় না।


2
@RestControllerস্প্রিং 4x এ চালু হয়েছিল। এই টীকাগুলি নিজেই এ্যানোটেট করা হয় @Controllerএটি যদি এটির মতো কাজ না করে তবে এটি @Controllerবাগ হিসাবে রিপোর্ট করুন।
গাওগাং 17

@ বার্টিব্রো, এটি মোটেই ঠিক নয়। আপনি একটি সংযুক্ত করতে পারেন Interceptorএকটি থেকে @RestController
রবি-এ-ডোর

আমি অবশ্যই সফলভাবে একটি সংযুক্ত করেছি Interceptorএকটি করতে @RestController
বেন বারডেন

11

যেমন আপনি স্প্রিং ডকুমেন্টেশনে দেখতে পাচ্ছেন ( স্প্রিং রেস্টকন্ট্রোলার ডকুমেন্টেশন ) রেস্ট কন্ট্রোলার টিকা রীতিটি নিয়ামক টীকা হিসাবে একই, তবে ধরে নেওয়া যে @ রিসপনসোডি ডিফল্টরূপে সক্রিয়, সুতরাং সমস্ত জসন জাভা অবজেক্টে পার্স করা হয়েছে।


4

স্প্রিং 4 + এ নতুন @ রিস্টকন্ট্রোলার টীকাগুলি, যা শ্রেণিটিকে একটি নিয়ামক হিসাবে চিহ্নিত করে যেখানে প্রতিটি পদ্ধতি দেখার পরিবর্তে একটি ডোমেন অবজেক্ট দেয়। এটি @ নিয়ন্ত্রণকারী এবং @ রেসপন্সবডি এর জন্য শর্টহ্যান্ড together


3

@RestControllerস্প্রিং ৪.০.১ থেকে সরবরাহ করা হয়েছিল। এই নিয়ন্ত্রকগুলি ইঙ্গিত দেয় যে এখানে @RequestMapping পদ্ধতিগুলি ডিফল্টরূপে @ রিসপনসবডি শব্দার্থকগুলি ধরে নেয়।

পূর্ববর্তী সংস্করণগুলিতে নীচে ব্যবহার করে অনুরূপ কার্যকারিতা অর্জন করা যেতে পারে:

  1. @RequestMappingসঙ্গে মিলিত @ResponseBodyমত@RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml") public @ResponseBody MyBean fetch(){ return new MyBean("hi") }

  2. <mvc:annotation-driven/> জ্যাকসন বা এক্সএমএল সহ জেএসএন ব্যবহার করার অন্যতম উপায় হিসাবে ব্যবহার করা যেতে পারে।

  3. মাইবিয়ান এর মতো সংজ্ঞা দেওয়া যেতে পারে

@XmlRootElement(name = "MyBean") @XmlType(propOrder = {"field2", "field1"}) public class MyBean{ field1 field2 .. //getter, setter }

  1. @ResponseBody এখানে এমভিসির মধ্যে ভিউ হিসাবে গণ্য করা হয় এবং এটি সরাসরি প্রেরণ করা হয় পরিবর্তে ডিসপ্যাচার সার্ভলেট থেকে প্রেরণ করা হয় এবং সম্পর্কিত রূপান্তরগুলি পাঠ্য / এইচটিএমএল, অ্যাপ্লিকেশন / এক্সএমএল, অ্যাপ্লিকেশন / জেসন এর মতো সম্পর্কিত ফর্ম্যাটে প্রতিক্রিয়া রূপান্তর করে।

তবে রেস্টকন্ট্রোলার ইতিমধ্যে রেসপন্সবডি এবং সংশ্লিষ্ট কনভার্টারের সাথে মিলিত led দ্বিতীয়ত, এখানে, যেহেতু প্রতিক্রিয়া ব্যক্তিকে রূপান্তরিত করার পরিবর্তে এটি স্বয়ংক্রিয়ভাবে http প্রতিক্রিয়াতে রূপান্তরিত হয়।


2

@Controllerআয় View@RestControllerআয় ResponseBody


2
আপনার আরও ব্যাখ্যা করা উচিত। কিভাবে এই প্রশ্নের উত্তর দিচ্ছে?
Yunnosch

@ ইউনোশচ 'ভিউ' হল আপনার সামনের প্রান্তটি জেএসপি বা এইচটিএমএলের মতো। রেসপন্সবিডিটি এক্সএমএল, জসন, ইয়ামল হতে পারে
জি.ব্রাউন

সহায়ক তথ্য যুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন। তবে এটি এখনও প্রশ্নের উত্তর কিভাবে দেওয়া উচিত তা আমি পাই না। আপনি "হ্যাঁ আপনি পারবেন / না পারবেন না, কারণ ...." এর মতো একটি ব্যাখ্যা আপনি কী বাক্য বলতে পারেন? "?
ইউনোশচ

1

আরআরএসটিফুল ওয়েব পরিষেবাদি তৈরির কাজ সহজ করার জন্য @ রিস্টকন্ট্রোলার টীকাটি বসন্ত 4.0.০ তে চালু হয়েছিল। এটি একটি সুবিধাযুক্ত টীকা যা @ নিয়ন্ত্রণকারী এবং @ রেসপন্সবডিকে একত্রিত করে - যা নিয়ামক শ্রেণীর প্রতিটি অনুরোধ হ্যান্ডলিং পদ্ধতিটি @ রেসপনসবডি টীকা সহ টীকা দেওয়ার প্রয়োজনকে দূর করে।


0
  • @Controller: এই টীকাটি কেবল একটি বিশেষ সংস্করণ @Componentএবং এটি নিয়ামক শ্রেণিকে ক্লাসপাথ স্ক্যানিংয়ের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে সনাক্ত করতে দেয়।
  • @RestController: এই টীকাটি এমন একটি বিশেষ সংস্করণ @Controllerযা এর স্বয়ংক্রিয়ভাবে অ্যাড করে দেয় @Controllerএবং @ResponseBodyটীকা দেয় তাই @ResponseBodyআমাদের ম্যাপিং পদ্ধতিতে আমাদের যুক্ত করতে হবে না ।

0

@ কনট্রোলারটি লিগ্যাসি সিস্টেমগুলিতে ব্যবহৃত হয় যা জেএসপি ব্যবহার করে। এটি মতামত ফিরে আসতে পারে। @ রিস্টকন্ট্রোলার হ'ল নিয়ন্ত্রকটি JSON প্রতিক্রিয়া প্রকারের সাথে REST পরিষেবা সরবরাহ করছে। সুতরাং এটি @ নিয়ন্ত্রণকারী এবং @ রেসপন্সবডি টীকাগুলি একসাথে মোড়ানো করে।


-3

@RestControllerএর কম্পোজিশনটি হ'ল @Controllerএবং @ResponseBodyযদি আমরা @ResponseBodyইন-মেথড সিগনেচার ব্যবহার না করি তবে আমাদের এটিকে ব্যবহার করা দরকার @Restcontroller


-3

@ কনট্রোলার এবং @ রেসপনসবিডি ব্যবহার না করে @ রিস্টকন্ট্রোলার আসুন আপনি বসন্ত 4.0.০ এবং তারপরের উপরের বিশ্রামের API প্রকাশ করতে দিন।


আপনি বলতে চান আমার মনে হয় @ রিস্টকন্ট্রোলার স্বয়ংক্রিয়ভাবে জেএসএন / এক্সএমএলের প্রতিক্রিয়া রূপান্তরিত করে। ? আপনি এটি পরিষ্কারভাবে ব্যাখ্যা করার পরিবর্তে একটি বিমূর্ত বাক্য ব্যবহার করেছেন, আমি এটি প্রস্তাব করব না।
cinqS

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