2017-09-19 3 views
0

Problèmes de sérialisation de l'objet BigDecimal vers Map en utilisant jackson version 2.7.3 (je ne peux pas modifier cette version sur mon projet). Il est toujours sérialisé en double. code J'utilise pour la sérialisation:Comment sérialiser BigDecimal pour mapper la valeur avec jackson?

public static Map<String, Object> serializeToMap(Object pojo) { 
    return new ObjectMapper().convertValue(pojo, new HashMap<String, Object>() {}.getClass()); 
} 

essayé d'ajouter:

@JsonSerialize(typing = JsonSerialize.Typing.STATIC, as = BigDecimal.class)

et utilisé sérialiseur:

public void serialize(BigDecimal value, JsonGenerator jgen, SerializerProvider provider) throws IOException { 
    jgen.writeObject(value.toString()); 
} 

Est-il possible de sérialisation comme BigDecimal?

+0

Lorsque vous dites que vous voulez une carte, vous dites que vous voulez que toutes les variables membres internes et leurs valeurs à l'intérieur BigDecimal, au lieu de la valeur décimale elle-même ? Si non, quelles sont EXACTEMENT vos attentes pour le JSON? S'il vous plaît fournir un exemple. –

+0

Je souhaite que les champs BigDecimal soient des champs BigDecimal (en valeur) dans Map, d'autres (tels que String, Integer) doivent rester eux-mêmes. Par exemple BigDecimal valeur Entrée , Valeur de chaîne Entrée MolecularMan

Répondre

0

Je résolu ce problème en remplaçant sérialisation avec:

return new ObjectMapper().enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS).convertValue(pojo, new HashMap<String, Object>() {}.getClass()); 
+0

Si votre réponse à cette question est, veuillez la marquer comme réponse acceptée. même si vous avez posé une question. Alors qu'il va passer à répondre aux questions scetion – VedX

+0

Je dois attendre 1 jour avant que je puisse accepter ma propre réponse – MolecularMan