Spring + Jackson,在序列化

时间:2017-08-03 18:09:04

标签: java json spring spring-boot jackson

我要求在使用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");
  }
}

2 个答案:

答案 0 :(得分:4)

在自定义序列化程序中

,只需从double创建一个bigdecimal,并指定所需的精度。然后只需在jsonGenerator中调用writeNumber。

编辑:根据用于测试结果的客户端,可能会自动从“视图”中删除0。 OP发现它是Postman(他用来检查结果的工具)在显示内容时删除0的那个,但是他生成的json没问题。

答案 1 :(得分:0)

如果您使用的是jackson 2.8.8版,似乎并非如此。 还要确保你正在查看json的排列。作为json viewer的一些时间格式并删除尾随零。