Bigdecimal低值

时间:2017-07-07 18:48:26

标签: java mysql spring spring-boot spring-data

我的mysql数据库中存储的值非常低,类似:

0.00000070
0.00000097

我正在使用spring boot将此值作为rest api提供,我的模型映射如下:

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
}

有一种显示方式可以存储吗?

由于

----编辑

将我的模型更改为此

    @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 个答案:

答案 0 :(得分:0)

<强>更新 正如 JB Nizet 在评论中所说,你必须使用:

  

WRITE_BIGDECIMAL_AS_PLAIN

由于 Jackson 2.2 WRITE_BIGDECIMAL_AS_PLAIN数据类型特定的序列化下可用,而默认则设置为{{1} }。

您可以使用false中的true方法将其设置为enable(),如下所示:

ObjectMapper

在您将 BigDecimal 转换为字符串时,您必须使用ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN); 方法,如下所示:

.toPlainString()

我认为您的问题是, JSON-String 中的指数显示了该值。我认为这不是问题,因为你在客户端和服务器端使用相同的模型(希望如此)。如果您想使用它,则无需更改格式。只是,如果要显示它,则需要使用String theWholeNumber = YourBigDecimalNumber.toPlainString(); 方法将其转换为字符串