2017-09-26 2 views
0

Dans un cas spécifique, Jackson choisit le mauvais sérialiseur pour le statut de problème de Zalando. Il choisit le EnumSerializer au lieu du StatusTypeSerializer qu'il devrait. Lors de la désérialisation, elle prend la bonne (c'est pourquoi j'ai l'exception ci-dessous)Zalando RFC7807 mauvais serializer choisi pour le statut avec Jackson

Le numéro peut être reproduit avec this project. Exécutez simplement AccountResourceIntTest.testRegisterInvalidLogin. Cela ne se produit pas dans un cas de test plus petit mais sur celui-ci de manière fiable.

C'est l'erreur si elle peut être d'aucune aide:

com.fasterxml.jackson.databind.JsonMappingException: jeton actuel (VALUE_STRING) non numérique, ne peut pas utiliser accesseurs valeur numérique à [ Source: [B @ 2aa85cc4; ligne: 1, colonne: 10181] à [Source: [B @ 2aa85cc4; ligne: 1, colonne: 10180] (par la chaîne de référence: org.zalando.problem.DefaultProblem [ "status"]) Motivation ou l'utilisation de cas

Je ne sais pas la logique de Jackson pour sélectionner le sérialiseur droit. Mais je sais que le mauvais sérialiseur est utilisé. Cela n'arrive pas sur tous mes tests. Cependant, chaque erreur de validation de contrainte échoue.

Une idée?

Répondre

3

Vous n'êtes pas régler les httpMessageConverters à restUserMockMvc.

L'ajout de cette résolu le problème pour moi:

.setMessageConverters(httpMessageConverters) 
+0

Tu es mon héros. Et c'était une question stupide rétrospectivement. J'ai été totalement trompé par le fait que l'autre 'MockMvc' fonctionnait. Merci! – Henri

+0

Ouais c'est déroutant parce que vous devez définir manuellement plusieurs choses sur le simulacre (ControllerAdvice, MessageConverter, Filter, etc) pour répliquer totalement le comportement de votre application Spring. Et c'est facile d'oublier de faire ça haha. – Falydoor