جاوا و تکنولوژی های آن

java programming language

در این وبلاگ به بررسی نکات موجود در جاوا و تکنولوژی های آن می پردازیم

طبقه بندی موضوعی


در Spring MVC راه های زیادی برای ست کردن کد وضعیت دلخواه برای Http Response وجود دارد در این بخش به بررسی ارسال کد وضعیت توسط ResponseStatus@ میپردازیم 



روی متد های کنترلر :


@ResponseStatus(HttpStatus.I_AM_A_TEAPOT)
void teaPot() {}


هنگامی که میخواهیم سیگنال error را همراه با علت آن ارسال کنیم :

@ResponseStatus(HttpStatus.BAD_REQUEST, reason = "Some parameters are invalid")
void onIllegalArgumentException(IllegalArgumentException exception) {}

هنگامی که از کد بالا استفاده کنیم Spring از HttpServletResponse.sendError() استفاده خواهد کرد و کاربر یک صفحه با توضیحات error دریافت خواهد کرد که برای REST مناسب نیست


* نکته ای که وجود دارد Spring موقعی از ResponseStatus@ استفاده میکند که Exception ای رخ نداده باشد 



ارسال Http Status Code هنگام رخ دادن خطا :


به سه طریق میتوان ResponseStatus@ را بکار برد که Exception رخ داده را به Http Status Code تبدیل کند :


- با استفاده از ExceptionHandler@

- با استفاده از ControllerAdvice@

- پیاده سازی کلاس Exception مورد نظر


دو روش اول را میتوان یک متد رسیدگی Error تعریف و کد دلخواه را ارسال کرد و آن متد ها را با ResponseStatus@ مشخص و کد دلخواه را ارسال کرد در این حالت مانند متد های کنترلر MVC خواهد بود


راه حل سوم موقعی است که روشی پویا برای ارسال کد وضعیت نخواهیم :

@ResponseStatus(code = HttpStatus.BAD_REQUEST)
class CustomException extends RuntimeException {}


* نکته ای که وجود دارد موقعی که ما یک کلاس از نوع Exception را با ResponseStatus@ تعریف میکنیم Spring همیشه متد HttpServletResponse.sendError() را صدا خواهد زد خواه دلیلی برای آن ست کرده باشیم و یا نکرده باشیم 


* همینطور اگر کلاس پدر با ResponseStatus@ تعریف شده باشد هم باز HttpServletResponse.sendError() استفاده خواهد شد 







نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی