我的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();
}
}
永远不会调用系统输出,结果仍然相同。
答案 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();
方法将其转换为字符串。