در این بخش به راه های ارسال کد های وضعیت Http به کلاینت را بررسی میکنیم. گاهی لازم است که این کدها بصورت خاص توسط خود ما تعیین شوند و کلاینت را از وضعیت پاسخ ارسالی با خبر کنیم
برای ست کردن کد وضعیت در Spring MVC چند راه حل وجود دارد :
- کلاس ResponseEntity
- ResponseStatus@
- ControllerAdvice@
@RequestMapping(value = "/controller", method = RequestMethod.GET) @ResponseBody public ResponseEntity sendViaResponseEntity() { return new ResponseEntity(HttpStatus.NOT_ACCEPTABLE); }
موقعی که خطایی در حین پردازش درخواست ایجاد شود لازم است که کد وضعیت مناسب ارسال گردد و اگر پردازش درخواست همراه با خطا نبود باید کد وضعیت عادی را ارسال کنیم
@RequestMapping(value = "/exception", method = RequestMethod.GET) @ResponseBody public ResponseEntity sendViaException() { throw new ForbiddenException(); }
کد بالا را طوری در نظر گرفتیم که با دریافت درخواست تولید خطا کند و حالا میخواهیم برای این خطا ایجاد شده کد وضعیت مناسب را در زیر ارسال کنیم :
@ResponseStatus(value = HttpStatus.FORBIDDEN, reason="To show an example of a custom message") public class ForbiddenException extends RuntimeException {}
وقتی درخواست به exception/ ارسال شد کنترلر یک خطا از نوع ForbiddenException پرتاب میکند که کنترلر وظیفه ارسال Response را به ForbiddenException میسپارد که بدون اینکه نیازی به نوشتن کد اضافی داشته باشیم با استفاده از ResponseStatus@ کد وضعیت 406 به کاربر ارسال خواهد شد این روش بصورت global عمل میکند و تمامی خطا ها از نوع ForbiddenException به این کلاس میرسند
همچنین میتوانیم علت ایجاد این خطا را در reason شرح دهیم که برای کاربر قابل نمایش خواهد بود
روش ControllerAdvice@ را در بخش خطا های REST توضیح داده میشود