[英]How to display BigDecimal number with trailing zero in a JSON (not as string)?
在我的表示响应中,我有一个 BigDecimal 类型的字段。 它的值是 2.30 但 json 响应将其显示为 2.3 有没有办法显示尾随零,而不将其显示为字符串? 顺便说一句 - 我正在使用杰克逊图书馆。
{
"version" : 2.3 (needs to be 2.30)
}
如果你想让 JSON 保持一个数值,你没有选择,数字不受小数部分中的“0”的影响,所以它们不会被使用。 仅仅是因为:
2.3 = 2.30
2.3 = 2.300000
零被简单地忽略。 如果你真的需要得到一个像 2.30 这样的值,你有两个选择,
String
在 JSON 中保存格式化的数字两种解决方案都将使用相同的逻辑:
String.format("%.2f", 2.3); //String: 2.30
不同之处在于您格式化值的那一刻。
由于您有一个“版本”字段,我将使用String
因为版本由以.
. 请参阅 Jackson 的 maven repo:
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.4</version>
</dependency>
2.9.4不是数字。
正如其他人指出的那样,在这种情况下,您确实应该传递一个字符串以保留格式,因为 JSON 中的数字类型旨在成为纯值。
但是,如果您真的需要这样做(在 Jackson 生成的 JSON 中的数字类型上输出尾随零),您可以这样做:
创建一个自定义序列化器类,如下所示:
final class PaddedSerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeRawValue(value.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
}
}
然后在绑定类中与相关值对应的变量上,放置 @JsonSerialize 注释以告诉它只在该变量上使用自定义序列化器类:
@JsonProperty(required = true)
@JsonSerialize(using = PaddedSerializer.class)
protected BigDecimal version;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.