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

java programming language

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

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


موقعی که یک API طراحی میکنیم ما معمولا باید نوع مدیای producer/consumer را مشخص کنیم که این میتواند مدیاهای مختلفی که بعدا ممکن است نیاز داشته باشیم را محدود کند

همچنین Http Header پارامتر Accept میتواند مشخص کند که کلاینت چه مدیاهایی را میتواند قبول کند و ما در سمت سرور میتوانیم یکی از انواع مورد قبول را استفاده کنیم و در صورتی که سمت سرور هیچکدام از مدیا های مورد حمایت کلاینت را نداشته باشیم Spring MVC خطای HttpMediaTypeNotAcceptableException  را پرتاب میکند

در این بخش یاد میگیریم که وقتی به خطای HttpMediaTypeNotAcceptableException برخورد کردیم چه کاری را باید انجام دهیم 


مثال عملیاتی دریافت خطای HttpMediaTypeNotAcceptableException  :


کنترل را یا کد زیر در نظر بگیرید :

@PostMapping(
  value = "/test", 
  consumes = MediaType.APPLICATION_JSON_VALUE, 
  produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String, String> example() {
    return Collections.singletonMap("key", "value");
}

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

curl -X POST --header "Accept: application/pdf" http://localhost:8080/test -v
 
> POST /test HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.51.0
> Accept: application/pdf

همانطور که میبینیم کلاینت درخواست مدیا از نوع pdf کرده است که در سمت سرور ارائه نمیشود و پیام زیر در response کلاینت دریافت میشود:

< HTTP/1.1 406 
< Content-Length: 0


در این مواقع تنها را حلی که وجود دارد استفاده از مدیریت خطای HttpMediaTypeNotAcceptableException است :

@ResponseBody
@ExceptionHandler(HttpMediaTypeNotAcceptableException.class)
public String handleHttpMediaTypeNotAcceptableException() {
    return "acceptable MIME type:" + MediaType.APPLICATION_JSON_VALUE;
}


در Spring پیام خطای ارسالی به سمت کلاینت به صورت پیش فرض خالی است ولی ما میتوانیم با ایجاد ExceptionHandler سفارشی یک پیام آگاهی دهنده از خطا را که به کاربر نمایش دهد را هم ارسال کنیم





نظرات  (۰)

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

ارسال نظر

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