私は、ジャクソンが予測できない任意の型に数値を逆シリアル化するという問題があります。たとえば、誰かが値「14」を渡すと、jacksonはそれをInteger
としてインスタンス化します。しかし、誰かが値「14.01」を渡すと、jacksonはそれをDouble
としてインスタンス化します。これは問題です。カスタムのデシリアライザ(@JsonCreator
)が例外をスローしているため、フィールドをBigDecimalにキャストできないためです。理想的には、jacksonはすべてをBigDecimal
に変換します。BigDecimalを使用するように強制するスプリングブートのジャックソンデシリアライザ
私はジャクソンがこのようなことをする可能性があることを示唆する投稿を見つけました。 Deserialize JSON into a generic map, forcing all JSON floats into Decimal or String, in Jackson
しかし、適切なメソッドmapper.enable()
を実行するために、Springブート内に隠れているマッパーオブジェクトにアクセスする方法を理解できません。あなたはジャクソンが時々ダブルスで供給していないので、Double
キャストが問題であることを、上記の見ることができるように
@JsonCreator
public OptionTransaction(Map<String,Object> jsonObj){
Map<String,Object> jsonOption = (Map<String, Object>) jsonObj.get("option");
Map<String,Object> optionPriceObj = (Map<String, Object>) jsonOption.get("price");
BigDecimal optionValue = new BigDecimal((Double) optionPriceObj.get("value"));
:ここ
は、デシリアライザの抜粋です。 jacksonにBigDecimals、あるいは単に文字列を出力させる簡単な方法を知っている人はいますか?
UPDATE:取得ダブルスのBigDecimalに変換する限り、私は次のようにapplication.propertiesを変更することによって、これを達成
:
# ===============================
# = DESERIALIZATION CUSTOMIZATION
# ===============================
spring.jackson.deserialization.USE_BIG_DECIMAL_FOR_FLOATS=true
なぜあなたはSpringマッパーにアクセスする必要がありますか?自分で作成してみませんか? –
私の質問への答えはそれを含むかもしれませんが、それは完全に質問に答えることはできません。私自身のマッパを作成する場合、どのように春のブートを使用してそれを使用するのですか? – melchoir55