デフォルトでは、ステータスコードが422のときに応答が無効であると判断します。これを変更するには、アダプタの機能を無効にすることができます。
また、ember-dataは、エラーをjson-apiエラーオブジェクトにフォーマットすることを想定しています。バックエンドでこの形式で返さない場合は、アダプタのhandleResponse
関数をオーバーライドすることで、バックエンドで変換できます。
これはサンプルJSON-APIエラーです:
{"errors": [
{
"detail": "Must be unique",
"source": { pointer: "/data/attributes/title"}
},
{
"detail": "Must not be blank",
"source": { pointer: "/data/attributes/content"}
}
]}
あなたは、上記のエラー応答を返している場合、あなたは、アダプタにこのような何かをしなければならないでしょう:
handleResponse(status, headers, payload) {
if (status === 422 && payload.errors) {
let jsonApiErrors = [];
for (let key in payload.errors) {
for (let i = 0; i < payload.errors[key].length; i++) {
jsonApiErrors.push({
detail: payload.errors[key][i],
source: {
pointer: `data/attributes/${key}`
}
});
}
}
return new DS.InvalidError(jsonApiErrors);
} else {
return this._super(...arguments);
}
}
何オブジェクトを保存するときに開発者コンソールからのリクエストのヘッダーですか? – DanGar
私は200になる前に400に変更されましたが、結果は同じです。 –
エラー処理は、ember-dataアダプタによって異なります。どのアダプターを使用していますか? – Engwan