春季休息中的双类型格式化程序



>我有里程类型的模型类别,声明如下

public class Mileage extends Entity {
@JsonProperty("mileageValue")
private double mileageValue;
@JsonProperty("mileageTime")
private long mileageTime;
}

REST 控制器方法的代码如下

public ResponseEntity<Mileage> getMileage(@RequestBody GetRequest req) throws Exception {
Mileage m1 = new Mileage();
m1.setMileageTime(10);
m1.setMileageValue(11111.11111);
return new ResponseEntity<>(m1, HttpStatus.OK);
}

如您所见,当我使用此行时,里程值属性设置为双倍

m1.setMileageTime(10.0);

大摇大摆的回应会是这样的

{
"mileageValue": 11111.11111,
"mileageTime": 10
}

如您所见,左侧为零的 Deicmal Point 已被修剪并变为 10 而不是 10.0,有没有办法使其看起来像 10.0 而不将其格式化为字符串?

您提到的当前代码不会编译它需要很长时间,并且您将其作为双精度传递。

请在下面找到我的解决方案:

@GetMapping("/test")
public Mileage test() {
Mileage m1 = new Mileage();
m1.setMileageTime(10.0);
m1.setMileageValue(11111.11111);
return m1;
}
static class Mileage  {
@Getter
@Setter
@JsonProperty("mileageValue")
private double mileageValue;
@Getter
@Setter
@JsonProperty("mileageTime")
@JsonSerialize(using = DecimalJsonSerializer.class)
private double mileageTime;
}
static class DecimalJsonSerializer extends JsonSerializer<Double> {
@Override
public void serialize(Double value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeString( String.format("%.2f", value));
}
}

响应:

{
"mileageValue": 11111.11111,
"mileageTime": "10.00"
}

链接问题:

为什么在杰克逊序列化过程中省略了十进制值为零的 Double?

相关内容

最新更新