我要求在使用Jackson的Spring-boot应用程序返回的数字上留下1位小数。
例如,值为9
的double应返回为9.0
,值9.5
应返回为9.5
。
这些应该适合json类型的数字'而不是'字符串' (他们周围没有引号,所以不是"9.0"
,而是9.0
之后。
我尝试使用JsonGenerator writeRaw(String)和writeRawValue编写自定义序列化程序,以及各种writeNumber方法。
writeRawValue建议它将写入值:
没有任何修改,但假设它必须构成一个单一的 合法的JSON值(数字,字符串,布尔值,空值,数组或列表)
然而,它正在删除.0
,或者至少.0
已经消失,因为它已经脱离了春季启动的时间。我在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");
}
}
答案 0 :(得分:4)
,只需从double创建一个bigdecimal,并指定所需的精度。然后只需在jsonGenerator中调用writeNumber。
编辑:根据用于测试结果的客户端,可能会自动从“视图”中删除0。 OP发现它是Postman(他用来检查结果的工具)在显示内容时删除0的那个,但是他生成的json没问题。
答案 1 :(得分:0)
如果您使用的是jackson 2.8.8版,似乎并非如此。 还要确保你正在查看json的排列。作为json viewer的一些时间格式并删除尾随零。