【发布时间】:2017-08-03 18:09:03
【问题描述】:
我要求在使用 Jackson 的 Spring-boot 应用程序返回的数字上保留 1 位小数。
例如,值为9 的双精度应返回为9.0,值9.5 应返回为9.5。
这些应该适合 json 类型“数字”,而不是“字符串”(它们周围没有引号,所以不是 "9.0",而是我在 9.0 之后。
我尝试使用 JsonGenerator 的 writeRaw(String) 和 writeRawValue 以及各种 writeNumber 方法编写自定义序列化程序。
writeRawValue 表明它将写入值:
没有任何修改,但假设它必须构成一个单一的 合法的 JSON 值(数字、字符串、布尔值、null、数组或列表)
但是它正在删除.0,或者至少.0 在它退出spring boot 时已经消失了。我在 Json spec 中看不到任何内容,这表明需要修剪尾随 0,实际上规范本身中有一个带有 -122.026020 的示例。
如何让.0 出现在我的回复中?这是我尝试过的:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
public class MyCustomSerialiser extends JsonSerializer<Double> {
@Override
public void serialize(Double value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeRawValue("123.450");
}
}
【问题讨论】:
-
我删除了我的答案,因为没有注意到您不希望它成为 json 字符串的事实。但这是最简单、最常规的方法,为什么要避免将字符串作为输出?
标签: java json spring spring-boot jackson