spring-boot - Spring序列化的双数格式
问题描述
我正在使用 Spring Boot 和 spring-web 并具有以下 dto:
public class InstructionDto {
private Long id;
private String scanningStatus;
private LocalDate dateSubmitted;
private InstructionTypeDto type;
private InstructionStatus status;
@DecimalMax(value = "1000000000.0", message = "Amount must be less than 1000000000")
private Double amount;
private String description;
private Currency currency;
private LocalDate actionByDate;
private LocalDate dateResolved;
private LocalDate cancellationDate;
}
带有类型amount
的字段Double
。
每当我尝试获得amount
> 10000000 的指令资源时,我都会得到类似的信息:
{
"id": 31,
"scanningStatus": "",
"dateSubmitted": "2020-08-17",
"type": {
"id": 1,
"name": "New Type"
},
"status": "SENT",
"amount": 1.0E8,
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean at tortor sit amet est finibus tempus. Vivamus dictum, quam in egestas mollis, nibh libero bibendum lorem, non malesuada enim risus ac risus. Fusce sed mi quis risus semper orci aliquam",
"currency": "USD",
"actionByDate": "2020-08-31",
"dateResolved": null,
"cancellationDate": null,
}
所以amount
= 1.0E8
,但是,我更喜欢amount
= 10000000
。
是否有可能以某种方式以适当的格式对其进行序列化?
谢谢
解决方案
解决方案是编写自定义序列化程序:
static class DecimalJsonSerializer extends JsonSerializer<Double> {
@Override
public void serialize(Double value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeNumber(String.format("%.2f", value));
}
}
然后将其应用于所需的字段:
public class InstructionDto {
...
@DecimalMax(value = "1000000000.0", message = "Amount must be less than 1000000000")
@JsonSerialize(using = DecimalJsonSerializer.class)
private Double amount;
...
}
推荐阅读
- java - 我的 ObjectOutputStream 工作不正常
- axios - 在我的代码中没有收到错误响应 http 代码
- javascript - 发布-订阅模式与 UI 的可见性
- python - 如何绘制通过使用牛顿法评估函数而呈现的多个数据点
- c++ - 如何解决声明错误
- python - 在 Python 中用科学计数法绘制值的表?
- powershell - 如何在powershell中导入csv替换字符并导出保存在blob中的csv
- blockchain - 我应该什么时候构建一个 Substrate 运行时模块而不是一个 Substrate 智能合约?
- javascript - 带大括号的代码和不带大括号的代码之间的区别
- here-api - 公共交通更新间隔和航班起飞时间数据