@ রিস্টকন্ট্রোলার বনাম @ রিপোসিটরিরিস্টেরেসোর্স কখন ব্যবহার করবেন


87

স্প্রিং উইথ আরআরএসটি কীভাবে ব্যবহার করতে হয় তার বিভিন্ন উদাহরণ আমি খুঁজছি । আমাদের শেষ লক্ষ্যটি একটি বসন্ত HATEOAS/HALসেটআপ

আমি স্প্রিংয়ের মধ্যেই REST উপস্থাপনের জন্য দুটি স্বতন্ত্র পদ্ধতি দেখেছি

  1. @RestControllerএকটি নিয়ামকের মাধ্যমে

  2. এর মাধ্যমে @RepositoryRestResourceএকটি সংগ্রহস্থলের মধ্যে

আমি যে জিনিসটির জন্য লড়াই করতে যাচ্ছি তা হ'ল আপনি কেন একে অপরকে ব্যবহার করবেন। কার্যকর করার চেষ্টা করার সময় HALকোনটি সেরা?

আমাদের ডাটাবেস ব্যাকএন্ড হ'ল Neo4j

উত্তর:


62

ঠিক আছে, তাই ছোট গল্পটি হ'ল আপনি @RepositoryRestResourceযেহেতু এটি ব্যবহার করতে চান যেহেতু এটি স্প্রিং জেপিএর সাথে একটি হেটোয়াস পরিষেবা তৈরি করে ।

আপনি দেখতে পাচ্ছেন যে এখানে এই টীকাটি যুক্ত করা এবং এটি আপনার পজোর সাথে সংযুক্ত করা আপনার কাছে সংগ্রহস্থল পদ্ধতি বা আরএসটি পরিষেবা পদ্ধতি প্রয়োগ না করেই সম্পূর্ণরূপে কার্যকরী HATEOAS পরিষেবা রয়েছে

যদি আপনি এটি যোগ করেন @RestControllerতবে আপনার নিজের দ্বারা প্রকাশ করতে চান এমন প্রতিটি পদ্ধতি আপনাকে প্রয়োগ করতে হবে এবং এটি এটিকে HATEOAS ফর্ম্যাটে রফতানি করে না ।


7
ডিফল্টরূপে, স্প্রিং ডেটা REST সমস্ত শীর্ষ-স্তরের, পাবলিক ইন্টারফেসের সংগ্রহস্থল রফতানি করবে। কোনও ইন্টারফেস রফতানি না করতে, বা শেষ পয়েন্টের বিশদ পরিবর্তন করতে আপনার কেবলমাত্র @RepositoryRestResource দরকার।
গ্রেগটার্ন

4
যদি আপনি স্প্রিং ডেটা রিস্টের সাথে রেস্টকন্ট্রোলার ব্যবহার করেন তবে আপনি স্প্রিং ডেটা রিস্টের সমস্ত সরবরাহের দিকটি ছাড়িয়ে যাবেন। একটি কাস্টম স্প্রিং এমভিসি কন্ট্রোলার কোড করার জন্য যা স্প্রিং ডেটা আরএসটি-র বার্তা রূপান্তরকারী ইত্যাদি ব্যবহার করে, বেসপ্যাথঅওয়ারকন্ট্রোলারটি দেখুন।
গ্রেগটার্ন

আমি মনে করি না গৃহীত উত্তর সঠিক আছে @ গ্রেগটার্নের আরও ভাল উত্তর রয়েছে।
চিহ্নিত করুন

39

তৃতীয় (এবং চতুর্থ) বিকল্প রয়েছে যা আপনি উল্লেখ করেছেন না, যা আপনি সত্তা-নির্দিষ্ট ক্রিয়াকলাপ করছেন কিনা তার উপর নির্ভর করে @BasePathAwareController বা @RepositoryRestController ব্যবহার করুন use

@ রিপোসিটরিআরস্ট্রোর্স জনসাধারণের সংগ্রহস্থল ইন্টারফেসে বিকল্পগুলি সেট করতে ব্যবহৃত হয় - এটি প্রসারণযোগ্য ধরণের (যেমন ক্রুডরোপোসিটরি / পেজিংএন্ডসোর্টিংরেপোজিটরি / ইত্যাদি) উপর ভিত্তি করে যথাযথ হিসাবে শেষ পয়েন্টগুলি তৈরি করে।

আপনি যখন ম্যানুয়ালি এন্ডপয়েন্টগুলি তৈরি করতে চান তবে @ সেটআপ করা স্প্রিং ডেটা আরএসটি কনফিগারেশনগুলি ব্যবহার করতে চাইলে @ বেসপ্যাথএওয়ারকন্ট্রোলার এবং @ রেপোসটরিআরস্টকন্ট্রোলার ব্যবহার করা হয়।

আপনি যদি @ রিস্টকন্ট্রোলার ব্যবহার করেন তবে আপনি বিভিন্ন কনফিগারেশন বিকল্পগুলির সাথে সমাপ্তি সমান্তরাল সেট তৈরি করতে পারবেন - যেমন একটি পৃথক বার্তা রূপান্তরকারী, বিভিন্ন ত্রুটি হ্যান্ডলার ইত্যাদি but তবে তারা আনন্দের সাথে সহাবস্থান করবে (এবং সম্ভবত বিভ্রান্তির কারণ হবে)।

নির্দিষ্ট ডকুমেন্টেশন এখানে পাওয়া যাবে


6
আমি মনে করি এটি আর সত্য নয়। যদি কোনও @RestControllerহিসাবে একই পথ ব্যবহার করে @RepositoryRestResource, সংগ্রহস্থলের শেষ পয়েন্টগুলি তৈরি করা হবে না।
হুবার্ট গ্রেজস্কোয়িয়াক

19

ঠিক আছে, উপরের উত্তরগুলি তাদের প্রসঙ্গে সঠিক এখনও আমি আপনাকে ব্যবহারিক উদাহরণ দিচ্ছি।

API এর অংশ হিসাবে অনেক পরিস্থিতিতে আমাদের নির্দিষ্ট মানদণ্ডের উপর ভিত্তি করে সত্তা অনুসন্ধানের জন্য শেষ পয়েন্টগুলি সরবরাহ করতে হবে। এখন জেপিএ ব্যবহার করে আপনাকে এমনকি কোয়েরিও লিখতে হবে না, কেবল স্প্রিং-জেপিএর নির্দিষ্ট নামকরণ সহ একটি ইন্টারফেস এবং পদ্ধতি তৈরি করুন। এই জাতীয় API গুলি প্রকাশ করার জন্য আপনি পরিষেবা স্তর তৈরি করবেন যা কেবলমাত্র এই সংগ্রহস্থলগুলি কল করবে এবং পরিশেষে কন্ট্রোলাররা পরিষেবা স্তরটিকে কল করে শেষ পয়েন্টগুলি প্রকাশ করবে।

স্প্রিং এখানে কী করেছে, আপনাকে এ জাতীয় ইন্টারফেসগুলি (সংগ্রহশালা) থেকে প্রকাশ করতে দেয় যা সাধারণত সত্তার সন্ধানে জিইটি কল হয় এবং ব্যাকগ্রাউন্ডে চূড়ান্ত সমাপ্তিগুলি তৈরি করতে প্রয়োজনীয় ফাইল উত্পন্ন করে। সুতরাং আপনি যদি @ রিপোসিটোরিস্ট্রিস্টোর্স ব্যবহার করে থাকেন তবে পরিষেবা / নিয়ন্ত্রণকারী স্তর তৈরি করার দরকার নেই।

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

আশাকরি এটা সাহায্য করবে.

এর জন্য আমার কার্যকারী উদাহরণ এবং ব্লগ দেখুন:
http://sv-technical.blogspot.com/2015/11/spring-boot-and-repositoryrestresource.html
https://github.com/svermaji/Spring-boot-with হাইবারনেট-না-নিয়ামক


আমি আমার ব্লগে লোকেদের দেখতে পাচ্ছি, যদি এই সমাধানটি কাজ করে তবে দয়া করে ভোট দিন।
শাইলু

10

@RepositoryRestController ওভাররাইড ডিফল্ট উত্পন্ন স্প্রোজি ডেটা আরএসটি নিয়ন্ত্রণকারীদের উন্মুক্ত সংগ্রহস্থল থেকে।

স্প্রিং ডেটা আরইএসটি এর সেটিংস, বার্তা রূপান্তরকারী, ব্যতিক্রম হ্যান্ডলিং এবং আরও অনেক কিছুর সুবিধা নিতে @RepositoryRestControllerস্ট্যান্ডার্ড স্প্রিং এমভিসির পরিবর্তে টিকা ব্যবহার করুন @Controllerবা@RestController

যেমন এই নিয়ন্ত্রণকারীরা spring.data.rest.basePathরাউটিংয়ের বেস পাথ হিসাবে স্প্রিং বুট সেটিংটি ব্যবহার করে ।

দেখুন উপেক্ষা করার স্প্রিং ডাটা বিশ্রাম রেসপন্স হ্যান্ডলার

@ResponseBodyএটি মিস হয়ে যাওয়ার সাথে যুক্ত করার বিষয়ে সচেতন হন@RepositoryRestController

আপনি যদি সংগ্রহস্থল উন্মুক্ত না করেন (হিসাবে চিহ্নিত @RepositoryRestResource(exported = false)), @BasePathAwareControllerপরিবর্তে টীকা ব্যবহার করুন

ব্যাগ সম্পর্কে সচেতন হতে হবে

ControllerLinkBuilderস্প্রিং ডেটা আরইএসটি এর বেস পাথটিকে বিবেচনায় নেয় @RequestMappingনা এবং শ্রেণি / ধরণের স্তরে ব্যবহার করা উচিত নয়

এবং

বেস পাথ HAL এ প্রদর্শিত হবে না

লিঙ্কটি ঠিক করতে workaround: https://stackoverflow.com/a/51736503/548473

আপডেট: শেষ পর্যন্ত আমি @RepositoryRestControllerপ্রচুর ওয়ার্কআরউন্ডের কারণে ব্যবহার না করা পছন্দ করি ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.