【发布时间】:2017-12-12 03:58:21
【问题描述】:
我在 mysql 数据库中存储的值非常低,类似于:
0.00000070
0.00000097
我正在使用 spring boot 将此值作为休息 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();
}
}
系统输出永远不会被调用,结果仍然相同。
【问题讨论】:
-
见github.com/FasterXML/jackson-databind/wiki/…:寻找WRITE_BIGDECIMAL_AS_PLAIN
-
您想格式化 BigDecimal 以进行显示。即使您想要的格式与重复帖子中使用的格式不同,这也是重复的。
-
@DwB 使用
String.format()和.toPlainString()相比有什么优势吗?对于OP想要的应该更好 -
阅读我的第一条评论,了解如何解决这个“问题”。关于您的最后一次编辑:您不会通过使用自定义 deserializer (应该转换JSON 值到 BigDecimal)。
-
@JBNizet 使用了您的建议,效果非常棒!谢谢
标签: java mysql spring spring-boot spring-data