غلبه بر چالش ها هنگام مهاجرت از JDK 8 به JDK 17: حل مشکلات استثنای سفارشی

از آنجایی که جاوا دائماً در حال تکامل است، بسیاری از توسعه دهندگان به تغییر از JDK 8 به JDK 17 فکر می کنند. این انتقال عملکرد بهبود یافته، افزایش ثبات و تعداد زیادی از ویژگی های جدید را ارائه می دهد. با این وجود، این فرآیند همیشه یکپارچه نیست و چندین چالش را ارائه می دهد. این مقاله به یکی از این مسائل مربوط به رسیدگی به استثناها می پردازد.
اخیراً وظیفه مهاجرت از JDK 8 به JDK 17 را بر عهده گرفتم. جعبه ابزار من شامل Gradle به عنوان ابزار ساخت، جاوا 17 و Spring Boot بود. در میان چالشهای مختلفی که با آن مواجه شدم، تمرکز اصلی این پست، موضوعی است که مربوط به رسیدگی به استثنا است.
آیا تا به حال انتظار یک قالب پیام استثنای سفارشی را داشته اید اما برنامه پیام استثنای پیش فرض را ارسال می کند؟ بیایید به این موضوع بپردازیم.
در Spring Boot، زمانی که پردازش درخواست منجر به استثنا میشود، برنامه معمولاً یک نمای خطای پیشفرض (برای مشتریان مرورگر) یا یک پاسخ JSON (برای مشتریان REST) را با ساختار زیر برمیگرداند:
{
“مهر زمانی”: “2022-03-25T13:01:02.000+0000″،
“وضعیت”: 500،
“error”: “خطای سرور داخلی”،
“پیام”: “خطایی رخ داده است”
“path”: “/api/endpoint”
}
با این حال، گاهی اوقات، ممکن است انتظار داشته باشید که قالب چیزی شبیه به این باشد:
{
“error message”
"اشتباهات":[
{
"code":"API_ERROR_403",
"message":
}
]
}
راه حل:
هسته اصلی این موضوع در تغییرات قابل توجهی است که با توجه به نسخه تامکت تعبیه شده است. javax.servlet.http.HttpServletRequest با jakarta.servlet.http.HttpServletRequest جایگزین شده است. راه حل این است که جاکارتا را جایگزین تمام واردات جاواکس کنید و برنامه شما باید بدون مشکل اجرا شود.
بخش مشکل این است که اگر فایل ساخت gradle/maven شما دارای وابستگی javax.servlet.api باشد، ممکن است با خطاهای واردات مواجه نشوید. آن را از javax.servlet.api وارد میکند، اما به دلیل تضاد بین APIهای جاکارتا از نسخه tomcat.embed و javax.servlet.api، مطابق انتظار عمل نمیکند.
بنابراین، اگر قصد استفاده از Tomcat 10 را دارید، باید کد خود را برای استفاده از جاکارتا منتقل کنید. بسته ها اگر به دلایلی این تغییر امکان پذیر نیست، توصیه می شود به تامکت 9 یا نسخه های قبلی که همچنان از javax استفاده می کنند، پایبند باشید. بسته ها
مهم است که توجه داشته باشید که شامل هر دو javax است. و جاکارتا کتابخانههای پروژه شما میتواند منجر به کلاسهای متضاد و رفتار غیرقابل پیشبینی شود و به طور کلی دلسرد میشود.
برای مطالعه این پست از شما سپاسگزارم. کد نویسی مبارک!“