406 خطأ عند محاولة استرداد JSON من نقطة النهاية

StackOverflow https://stackoverflow.com/questions/4208866

  •  25-09-2019
  •  | 
  •  

سؤال

رأيت بعض الأسئلة الأخرى من هذا النوع لكنها لم تتناسب مع الفاتورة تمامًا.

أحاول حاليًا إعادة JSON من وحدات تحكم مختلفة. في إحدى وحدات التحكم الخاصة بي ، لا تعمل دون أي مشكلة ، لكن عندما أصبت بنقطة النهاية الثانية ، أحصل على خطأ 406 ولا يمكنني معرفة الخطأ. هذا هو عمل وحدة التحكم:

@RequestMapping("/v1/companies/name/{companyName}")
public @ResponseBody ResultsList<CompanyResult> getCompaniesByName(@PathVariable("companyName") String companyName) {

    if (StringUtils.isEmpty(companyName)) {
        throw new HttpMessageNotReadableException("blah");
    }

    ResultsList<CompanyResult> results = companySearchService.getCompaniesByName(companyName);

    return results;
}

هذا هو النموذج الذي أحاول العودة:

public class ResultsList<T> {
    @XmlElement(name = "results")
    private ArrayList<T> results;

    public int resultCount() {
        return this.results.size();
    }

    public void addResult(T result) {
        this.results.add(result);
    }

    public ResultsList() {
        this.results = new ArrayList<T>();
    }
}

كما ترون من رمز وحدة التحكم ، تتكون قائمة النتائج الخاصة بي من كائنات الشركة:

public class CompanyResult implements ICompany {
    @XmlElement(name = "companyName")
    private String companyName;

    @XmlElement(name = "symbol")
    private String symbol;

    @XmlElement(name = "city")
    private String city;

    @XmlElement(name = "state")
    private String state;
......

لذا ، تقوم وحدة التحكم الخاصة بي بإرجاع قائمة النتائج requestbody ، والتي يتم شرحها باستخدام XMlelement ، والكائنات الواردة في القائمة مربوطة أيضًا بـ xmlelement. هذا ما كان علي فعله للحصول على السيناريو الآخر للعمل. لكن هذا فشل. يمكن لأحد أن يقول لي لماذا؟

هل كانت مفيدة؟

المحلول 2

public class ResultsList<T> {
    private List<T> mResults;

    @JsonGetter("results")
    public final List<T> getResults() {
        return mResults;
    }

}

نصائح أخرى

وفق قائمة رموز استجابة HTTP 406 (غير مقبول) يعني

المورد المطلوب قادر فقط على إنشاء محتوى غير مقبول وفقًا لرؤوس القبول المرسلة في الطلب.

لذلك ربما لم تقم بتعيين رأس القبول للسماح لـ XML بأن يكون مقبولًا. عادة ، تتوقع JavaScript JSON افتراضيًا. لذلك ، لتعيين رأس قبول استخدم شيئًا مثل ما يلي:

function getCompany() {
 var client = new XMLHttpRequest();
 client.open("GET", "/v1/companies/name/exampleCompany");
 client.setRequestHeader("Accept", "application/xml");
 client.send();
}

بدلاً من ذلك ، يمكنك إعداد خدمة الويب الخاصة بك لإنتاج التطبيق/JSON بدلاً من ذلك.

تأكد <mvc:annotation-driven> هو في سياق الربيع MVC. يحدث هذا الخطأ عندما لا يتعرف SPRING MVC على ResponseBody (لم يتم تسجيل HTTPMESSAGECONVERTER (S) ، وبالتالي يحاول تحويل كائن النتيجة إلى نموذج الموضة القديم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top