সরাসরি প্রধান সামগ্রীতে চলে যান

স্প্রিং বুট কুইজ অ্যাপ: রেসপন্স এনটিটি এবং এক্সেপশন হ্যান্ডলিং

ইন্ট্রোডাকশন (Introduction): আজকের এই ব্লগে আমরা শিখব কীভাবে একটি স্প্রিং বুট (Spring Boot) অ্যাপ্লিকেশনে প্রফেশনাল উপায়ে ডেটা রিটার্ন করতে হয়। সাধারণত আমরা যখন সার্ভার থেকে ডেটা পাঠাই, তখন শুধু ডেটা পাঠালেই হয় না, সাথে একটি 'Status Code' বা সংকেত পাঠাতে হয় যাতে ক্লায়েন্ট (যেমন: মোবাইল অ্যাপ বা ওয়েবসাইট) বুঝতে পারে কাজটা ঠিকঠাক হয়েছে কি না। আমরা এখানে ResponseEntity এবং Exception Handling নিয়ে বিস্তারিত আলোচনা করব।


১. HTTP স্ট্যাটাস কোড কী? (Understanding HTTP Status Codes)

ভিডিও রেফারেন্স: [00:22]

আমরা যখন ইন্টারনেটে কোনো লিংকে ক্লিক করি এবং পেজটি খুঁজে পাওয়া যায় না, তখন আমরা '404 Error' দেখি। এই যে '404', এটিই হলো একটি স্ট্যাটাস কোড। ডেভেলপার হিসেবে আমাদের জানতে হয় কোন সময় কোন কোড পাঠাতে হবে।

  • 200 - 299 (Success): যখন সবকিছু ঠিকঠাক কাজ করে। যেমন: 200 OK (ডেটা পাওয়া গেছে), 201 Created (নতুন কিছু তৈরি হয়েছে)।

  • 400 - 499 (Client Error): যখন ইউজার বা ক্লায়েন্ট কোনো ভুল করে। যেমন: ভুল ইউআরএল (URL) দেওয়া।

  • 500 - 599 (Server Error): যখন সার্ভারের নিজের ভেতরে কোনো সমস্যা বা বাগ (Bug) থাকে।

সহজ ব্যাখ্যা:

  • সার্ভার (Server): এটি একটি শক্তিশালী কম্পিউটার যেখানে সব ডেটা জমা থাকে।

  • ক্লায়েন্ট (Client): আপনি যে ফোন বা কম্পিউটার দিয়ে ওয়েবসাইট দেখছেন।


২. রেসপন্স এনটিটি (ResponseEntity) ব্যবহার করা

ভিডিও রেফারেন্স: [04:12]

আগে আমরা সরাসরি ডেটা রিটার্ন করতাম, কিন্তু ResponseEntity ব্যবহার করলে আমরা ডেটার সাথে স্ট্যাটাস কোডও পাঠাতে পারি।

কোড উদাহরণ (Controller):

Java

@GetMapping("allQuestions")
public ResponseEntity<List<Question>> getAllQuestions() {
    return questionService.getAllQuestions();
} 

ব্যাখ্যা: এখানে আমরা বলছি যে এই মেথডটি শুধু প্রশ্নের লিস্ট দেবে না, বরং একটি 'ResponseEntity' দেবে যার ভেতরে প্রশ্নের লিস্ট এবং একটি স্ট্যাটাস কোড থাকবে।


৩. সার্ভিস লেয়ারে এক্সেপশন হ্যান্ডলিং (Exception Handling in Service)

ভিডিও রেফারেন্স: [05:25]

সফটওয়্যার চালানোর সময় হঠাত কোনো ভুল হতে পারে (যেমন ডাটাবেস বন্ধ থাকা)। এই ভুলগুলোকে সুন্দরভাবে সামলানোকেই বলে 'Exception Handling'। আমরা try-catch ব্লক ব্যবহার করে এটি করি।

কোড উদাহরণ (Service Layer):

Java

public ResponseEntity<List<Question>> getAllQuestions() {
    try {
        // ডাটাবেস থেকে সব প্রশ্ন খোঁজা হচ্ছে
        return new ResponseEntity<>(questionDao.findAll(), HttpStatus.OK);
    } catch (Exception e) {
        e.printStackTrace(); // কনসোলে ভুলটি দেখাবে
        // ভুল হলে আমরা খালি লিস্ট এবং 'BAD_REQUEST' স্ট্যাটাস পাঠাবো
        return new ResponseEntity<>(new ArrayList<>(), HttpStatus.BAD_REQUEST);
    }
} 

সহজ ব্যাখ্যা:

  • Try: এখানে আমরা আমাদের আসল কাজটা করার চেষ্টা করি।

  • Catch: যদি 'Try' ব্লকে কোনো ভুল হয়, তবে কোডটি সরাসরি 'Catch' ব্লকে চলে আসে এবং অ্যাপ্লিকেশন ক্র্যাশ না করে একটি সুন্দর মেসেজ দেয়।


৪. নতুন ডেটা তৈরি এবং ২০১ (Created) স্ট্যাটাস

ভিডিও রেফারেন্স: [09:37]

যখন আমরা নতুন কোনো প্রশ্ন ডাটাবেসে সেভ করি, তখন 200 OK এর বদলে 201 Created পাঠানো বেশি যুক্তিযুক্ত। এটি ক্লায়েন্টকে নিশ্চিত করে যে নতুন রিসোর্সটি সফলভাবে তৈরি হয়েছে।

কোড উদাহরণ (Add Question):

Java

public ResponseEntity<String> addQuestion(Question question) {
    questionDao.save(question);
    return new ResponseEntity<>("Success", HttpStatus.CREATED);
} 

কী শিখলাম: এই কোডটি একটি নতুন প্রশ্ন সেভ করবে এবং রেজাল্ট হিসেবে "Success" টেক্সট ও 201 কোড পাঠাবে।


৫. কঠিন শব্দের সহজ অর্থ (Glossary)

  • API (Application Programming Interface): দুটি সফটওয়্যারের মধ্যে কথা বলার মাধ্যম।

  • DAO (Data Access Object): যা ডাটাবেসের সাথে সরাসরি যোগাযোগ করে।

  • Endpoint: একটি নির্দিষ্ট ইউআরএল (URL) যেখানে রিকোয়েস্ট পাঠালে সার্ভার রেসপন্স দেয়।

  • Payload: রিকোয়েস্ট বা রেসপন্সের আসল ডেটা।


আমাদের বিশ্লেষণ ও চিন্তাভাবনা (Analysis & Perception)

কন্টেন্ট ক্রিয়েটর এখানে দেখিয়েছেন যে, কোড শুধু কাজ করলেই হয় না, সেটিকে প্রফেশনাল মানের হতে হয়। ResponseEntity ব্যবহারের মাধ্যমে আমরা ফ্রন্ট-এন্ড ডেভেলপারদের কাজ অনেক সহজ করে দিই। তারা স্ট্যাটাস কোড দেখেই বুঝতে পারে লোডার দেখাতে হবে নাকি এরর মেসেজ।

বাস্তব প্রেক্ষাপট: আপনি যখন অনলাইনে পেমেন্ট করেন এবং পেমেন্ট সফল হয়, তখন সার্ভার 200 পাঠায়। যদি ব্যালেন্স না থাকে তবে হয়তো 400 বা নির্দিষ্ট কোনো এরর কোড পাঠায়। এই সিস্টেমটি ছাড়া ইন্টারনেট অ্যাপ্লিকেশন চালানো অসম্ভব।

বিকল্প ও পরামর্শ:

  • Global Exception Handling: প্রতিটি মেথডে আলাদা করে try-catch না লিখে @ControllerAdvice ব্যবহার করে পুরো অ্যাপ্লিকেশনের জন্য একটি কমন এরর হ্যান্ডলার তৈরি করা আরও ভালো। এতে কোড অনেক পরিষ্কার থাকে।

  • Custom Exceptions: সাধারণ Exception ব্যবহার না করে নিজের নামে এরর (যেমন: QuestionNotFoundException) তৈরি করলে কোডটি আরও বেশি বোধগম্য হয়।

এই টিউটোরিয়ালটি মাইক্রোসার্ভিস আর্কিটেকচারের জন্য একটি মজবুত ভিত্তি তৈরি করে দিচ্ছে, যেখানে প্রতিটি সার্ভিস একে অপরের সাথে এই স্ট্যাটাস কোডগুলোর মাধ্যমেই যোগাযোগ করবে। [11:32]

[

Quiz App Using Spring Boot #4 | ResponseEntity and Exception Handling | Microservices Tutorial

Telusko · 37K views

](http://www.youtube.com/watch?v=yrfY3zCJ_tA)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...