2017-07-07 4 views
1

私は本当に低い値、そのようなこと:BigDecimalの低い値

0.00000070 
0.00000097 

私は残りのAPIとして、この値を提供するために、スプリングのブートを使用していますが、私のモデルは次のようにマッピングされます。

DBに
public class Account extends BaseEntity { 

    @Column(name = "VALUATION", precision = 15, scale = 8) 
    @JsonView({ ViewsUtil.Ticker.class, ViewsUtil.Chart.class }) 
    @Setter @Getter 
    private BigDecimal valuation; 

    // others fields 

それは私が現れたように、正しく保存されていますが、表示するには、それだけでこのように示しています:

{ 
    "valuation": 9.7e-7 
} 

のTh保存されているように表示する方法はありますか?

おかげ

---- EDIT

このように、この

@Column(name = "VALUATION", precision = 15, scale = 8) 
    @JsonView({ ViewsUtil.Ticker.class, ViewsUtil.Chart.class }) 
    @JsonDeserialize(using = LowValueDeserializer.class) 
    @Setter @Getter 
    private BigDecimal valuation; 

そして、私のカスタムデシリアライザに私のモデルを変更:

@JsonComponent 
public class LowValueDeserializer extends JsonDeserializer<String> { 

    @Override 
    public String deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException { 
     System.out.println(parser.getDecimalValue()); 

     return parser.getDecimalValue().toPlainString(); 
    } 
} 

システムアウトが呼び出されることはありません結果は変わりません。

+1

https://github.com/FasterXML/jackson-databind/wiki/Serialization-featuresを参照してください:WRITE_BIGDECIMAL_AS_PLAINを探してください。 –

+0

表示するBigDecimalの書式を設定します。これは複製されたポストで使用されているフォーマットと異なるフォーマットでも複製されます。 – DwB

+0

@DwB '.toPlainString()'の上にあるdupeのように 'String.format()'を使う利点はありますか? OPが望んでいるもののほうがはるかに良いでしょう。 – baao

答えて

0

更新: としてJB Nizetは彼のコメントで、あなたが使用する必要があります言う:

WRITE_BIGDECIMAL_AS_PLAIN

ジャクソン2.2WRITE_BIGDECIMAL_AS_PLAINDatatype-で利用することができますので、特定シリアル化およびデフォルトfalseと設定します。あなたは次のように、ObjectMapperからメソッドenable()trueにそれを設定することができます

ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN); 

あなたは文字列のBigDecimalを変換する時点で、あなたは.toPlainString()を使用する必要があります。方法は次のようになります。

String theWholeNumber = YourBigDecimalNumber.toPlainString(); 

私はあなたの問題は価値があなたのJSON-文字列における指数で示されていること、だと思います。クライアントとサーバー側で同じモデルを使用しているので(問題なく)、問題ではないと思います。作業をしたい場合は、フォーマットを変更する必要はありません。表示する場合は.toPlainString()メソッドの文字列に変換する必要があります。

+0

はい、私は@ JsonDeserializeを使用してこれを試しましたが、メソッドは呼び出されません – c0nf1ck

+0

私の投稿を編集し、私が言ったコードを追加します – c0nf1ck