Java pour Jackson la sérialisation JSON: l'Argent des champs
Actuellement, je suis en utilisant Jackson pour envoyer des résultats JSON à partir de mon Ressort en fonction de l'application web.
Le problème, je vais avoir est d'essayer d'obtenir de l'argent tous les champs de sortie avec 2 décimales. Je n'ai pas pu résoudre ce problème en utilisant setScale(2)
, comme les nombres comme 25.50 sont tronqués à 25,5 etc
Quelqu'un d'autre a traité ce problème? Je pensais à faire de l'Argent de la classe avec une coutume Jackson sérialiseur... pouvez-vous personnaliser un sérialiseur pour une variable de champ? Vous pouvez probablement... Mais même dans ce cas, comment pourrais-je obtenir mon client sérialiseur pour ajouter le nombre comme un nombre avec 2 décimales?
- De quoi êtes-vous le stockage de ces valeurs? Un
BigDecimal
? - oui un BigDecimal
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un sérialiseur à votre argent de terrain. Voici un exemple avec un MoneyBean. Le domaine montant obtient annoté avec @JsonSerialize(à l'aide d'=...).
Que c'est. Un BigDecimal est maintenant imprimé dans le droit chemin. J'ai utilisé un simple cas de test pour le montrer:
ROUND_HALF_UP
. Aussi, les différentes monnaies s'attendre à un nombre différent de fuite décimales.Au lieu de mettre le @JsonSerialize sur chaque membre ou de lecture, vous pouvez configurer un module qui utilisent un custome sérialiseur pour un certain type:
Dans l'exemple ci-dessus, j'ai utilisé la chaîne de sérialiseur pour sérialiser BigIntegers (depuis le javascript ne peut pas gérer de telles valeurs numériques).
SpringMvcConfiguration
s'étendDelegatingWebMvcConfiguration
, alors vous pouvez remplacerextendMessageConverters()
méthode, trouverMappingJackson2HttpMessageConverter
dans la liste des convertisseurs et puis de l'enregistrer SimpleModule comme ça:mappingJackson2HttpMessageConverter.getObjectMapper().registerModule(simpleModule)
. De cette façon, vous n'aurez pas préséance sur lamappingJackson2HttpMessageConverter
.Vous pouvez utiliser
@JsonFormat
annotation avecshape
commeSTRING
sur votreBigDecimal
variables. Reportez-vous ci-dessous:Je suis l'un des responsables de jackson-type de données-de l'argent, afin de prendre cette réponse avec un grain de sel car je ne suis certainement biaisé. Le module devrait couvrir vos besoins et il est très léger-poids (sans les dépendances d'exécution). En outre, il est mentionné dans la Jackson docs, Printemps docs et il y avait même des certaines discussions déjà sur la façon de l'intégrer dans l'officiel de l'écosystème de Jackson.
J'ai eu le même problème et je l'ai eu formatées en JSON comme une Chaîne de caractères à la place. Peut-être un peu d'un hack, mais il est facile à mettre en œuvre.