繁体   English   中英

如何在 JSON 中显示尾随零的 BigDecimal 数字(不是字符串)?

[英]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 这样的值,你有两个选择,

  1. 使用String在 JSON 中保存格式化的数字
  2. 在客户端格式化值。

两种解决方案都将使用相同的逻辑:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM