উত্তর:
@Controller ক্লাসগুলি স্প্রিং এমভিসি কন্ট্রোলার হিসাবে চিহ্নিত করতে ব্যবহৃত হয়।@RestControllerসুবিধাযুক্ত টীকা যা হ'ল টীকা @Controllerএবং @ResponseBodyটীকা যুক্ত করা ছাড়া আর কিছুই করে না (দেখুন: জাভাদোক )সুতরাং নিম্নলিখিত দুটি নিয়ামক সংজ্ঞা একই কাজ করা উচিত
@Controller
@ResponseBody
public class MyController { }
@RestController
public class MyRestController { }
Thymeleafএটি এর সাথে কাজ করবে না যার @RestControllerকারণে @ResponseBodyএই টীকায় অন্তর্ভুক্ত রয়েছে।
@ResponseBodyপ্রত্যাবর্তিত বস্তুগুলিকে এমন কিছুতে পরিণত করে যা শরীরে থাকতে পারে, যেমন জেএসএন বা এক্সএমএল ( উত্স )
নীচের কোডে আমি আপনাকে পার্থক্যটি দেখাব @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ডিফল্টরূপে সক্রিয় করা হয়। আপনার এটি ফাংশনের স্বাক্ষরের উপরে যুক্ত করার দরকার নেই।
আপনি যদি ব্যবহার করেন তবে আপনি @RestControllerকোনও দর্শন ( Viewresolverস্প্রিং / স্প্রিংবুটে ব্যবহার করে ) ফিরিয়ে দিতে পারবেন না @ResponseBodyএবং এই ক্ষেত্রে হ্যাঁ দরকার নেই।
আপনি যদি ব্যবহার করেন তবে @Controllerআপনি স্প্রিং ওয়েব এমভিসিতে একটি দৃশ্য ফিরে আসতে পারেন।
প্রকৃতপক্ষে, সাবধান হন - এগুলি হুবহু এক নয়।
আপনি যদি আপনার অ্যাপ্লিকেশনের মধ্যে কোনও ইন্টারসেপ্টর সংজ্ঞায়িত করেন @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 {...
ইন্টারসেপ্টারের সাথে যুক্ত হওয়ার সাথে এটি শেষ হয় না।
@RestControllerস্প্রিং 4x এ চালু হয়েছিল। এই টীকাগুলি নিজেই এ্যানোটেট করা হয় @Controllerএটি যদি এটির মতো কাজ না করে তবে এটি @Controllerবাগ হিসাবে রিপোর্ট করুন।
Interceptorএকটি থেকে @RestController।
Interceptorএকটি করতে @RestController।
যেমন আপনি স্প্রিং ডকুমেন্টেশনে দেখতে পাচ্ছেন ( স্প্রিং রেস্টকন্ট্রোলার ডকুমেন্টেশন ) রেস্ট কন্ট্রোলার টিকা রীতিটি নিয়ামক টীকা হিসাবে একই, তবে ধরে নেওয়া যে @ রিসপনসোডি ডিফল্টরূপে সক্রিয়, সুতরাং সমস্ত জসন জাভা অবজেক্টে পার্স করা হয়েছে।
@RestControllerস্প্রিং ৪.০.১ থেকে সরবরাহ করা হয়েছিল। এই নিয়ন্ত্রকগুলি ইঙ্গিত দেয় যে এখানে @RequestMapping পদ্ধতিগুলি ডিফল্টরূপে @ রিসপনসবডি শব্দার্থকগুলি ধরে নেয়।
পূর্ববর্তী সংস্করণগুলিতে নীচে ব্যবহার করে অনুরূপ কার্যকারিতা অর্জন করা যেতে পারে:
@RequestMappingসঙ্গে মিলিত @ResponseBodyমত@RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml")
public @ResponseBody MyBean fetch(){
return new MyBean("hi")
}
<mvc:annotation-driven/> জ্যাকসন বা এক্সএমএল সহ জেএসএন ব্যবহার করার অন্যতম উপায় হিসাবে ব্যবহার করা যেতে পারে।
@XmlRootElement(name = "MyBean")
@XmlType(propOrder = {"field2", "field1"})
public class MyBean{
field1
field2 ..
//getter, setter
}
@ResponseBody এখানে এমভিসির মধ্যে ভিউ হিসাবে গণ্য করা হয় এবং এটি সরাসরি প্রেরণ করা হয় পরিবর্তে ডিসপ্যাচার সার্ভলেট থেকে প্রেরণ করা হয় এবং সম্পর্কিত রূপান্তরগুলি পাঠ্য / এইচটিএমএল, অ্যাপ্লিকেশন / এক্সএমএল, অ্যাপ্লিকেশন / জেসন এর মতো সম্পর্কিত ফর্ম্যাটে প্রতিক্রিয়া রূপান্তর করে।তবে রেস্টকন্ট্রোলার ইতিমধ্যে রেসপন্সবডি এবং সংশ্লিষ্ট কনভার্টারের সাথে মিলিত led দ্বিতীয়ত, এখানে, যেহেতু প্রতিক্রিয়া ব্যক্তিকে রূপান্তরিত করার পরিবর্তে এটি স্বয়ংক্রিয়ভাবে http প্রতিক্রিয়াতে রূপান্তরিত হয়।
আরআরএসটিফুল ওয়েব পরিষেবাদি তৈরির কাজ সহজ করার জন্য @ রিস্টকন্ট্রোলার টীকাটি বসন্ত 4.0.০ তে চালু হয়েছিল। এটি একটি সুবিধাযুক্ত টীকা যা @ নিয়ন্ত্রণকারী এবং @ রেসপন্সবডিকে একত্রিত করে - যা নিয়ামক শ্রেণীর প্রতিটি অনুরোধ হ্যান্ডলিং পদ্ধতিটি @ রেসপনসবডি টীকা সহ টীকা দেওয়ার প্রয়োজনকে দূর করে।
@Controller: এই টীকাটি কেবল একটি বিশেষ সংস্করণ @Componentএবং এটি নিয়ামক শ্রেণিকে ক্লাসপাথ স্ক্যানিংয়ের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে সনাক্ত করতে দেয়।@RestController: এই টীকাটি এমন একটি বিশেষ সংস্করণ @Controllerযা এর স্বয়ংক্রিয়ভাবে অ্যাড করে দেয় @Controllerএবং @ResponseBodyটীকা দেয় তাই @ResponseBodyআমাদের ম্যাপিং পদ্ধতিতে আমাদের যুক্ত করতে হবে না ।@ কনট্রোলারটি লিগ্যাসি সিস্টেমগুলিতে ব্যবহৃত হয় যা জেএসপি ব্যবহার করে। এটি মতামত ফিরে আসতে পারে। @ রিস্টকন্ট্রোলার হ'ল নিয়ন্ত্রকটি JSON প্রতিক্রিয়া প্রকারের সাথে REST পরিষেবা সরবরাহ করছে। সুতরাং এটি @ নিয়ন্ত্রণকারী এবং @ রেসপন্সবডি টীকাগুলি একসাথে মোড়ানো করে।
@ কনট্রোলার এবং @ রেসপনসবিডি ব্যবহার না করে @ রিস্টকন্ট্রোলার আসুন আপনি বসন্ত 4.0.০ এবং তারপরের উপরের বিশ্রামের API প্রকাশ করতে দিন।