Używam teraz:

  • ember: 3.8.1
  • ember-data: 3.10.0

Próbuję wysłać odpowiedź błędów z API Grails z dodatkowymi danymi. Wygląda na to coś takiego:

respond(
    status: HttpStatus.UNPROCESSABLE_ENTITY, 
    errors: errors
    additionalData: someMap
)

Po stronie frontend z Ember próbuję go złapać z:

object.save().then(function () {
    // (...)
}).catch((response) => {
    // Here I want to access "response.additionalData"
    // (...)
});

Teraz wiem, że ember-data ma własny sposób na obsługę i wiązanie odpowiedzi na błędy (https://davidtang.io/2016/01/09/Handling-Erors-with-ber-data.html), ale w ember-data: 2.10.0 Złap i rącz błędy z dodatkowymi danymi na złowieniu za pomocą response.additionalData.

W wersji używam response.additionalData jest zawsze undefined i nie mogę go w żaden sposób dostać. Pochodzi z backend, ponieważ widzę go w przeglądarce Dev narzędzi w odpowiedzi.

Jak mogę to osiągnąć w najnowszym {x0}}? Spróbowałem napisać adapter i zastąpić funkcję handleResponse, ale nawet mój własny CustomerrrorClass nadal był jak rodzimy.

Każda pomoc będzie mile widziana. Z góry dziękuję!

1
bmrki 15 październik 2020, 16:17

1 odpowiedź

Najlepsza odpowiedź

Spróbowałem więc kilku opcji z meta członek formatu JSONAPI, jak opisano tutaj:

Początkowo nie pomogło, odpowiedź z serwera była:

Error: Assertion Failed: Your transport record was saved to the server, but the response does not have an id and no id has been set client side. Records must have ids. Please update the server response to provide an id in the response or generate the id on the client side either before saving the record or while normalizing the response.

Następnie dodałem status odpowiedzi na obiekt HttpServletResponse response jak:

response.status = HttpStatus.UNPROCESSABLE_ENTITY.value()

Więc pełna część odpowiedzi wygląda tak:

response.status = HttpStatus.UNPROCESSABLE_ENTITY.value()
render([errors: [[status: HttpStatus.UNPROCESSABLE_ENTITY,
                  title : e.message,
                  detail: message,
                  meta  : [additionalData: additionalData]]
]] as JSON)

Zauważ również, że zawartość errors jest w nawiasach podwójnych [[ dla formatu JSONAPI.

W końcu otrzymałem właściwą odpowiedź z członkiem meta:

enter image description here

1
bmrki 19 październik 2020, 09:02