在POJO中将double序列化为int

时间:2017-12-07 17:50:12

标签: java json serialization pojo

我无法弄清楚如何在我的POJO中将我的双精度序列化为int。目前,我在setter方法中进行转换。 double将始终介于0和1之间。以下是我的POJO中的getter和setter方法:

@JsonProperty("costMargin")
public int getCostMargin() {
    return costMargin;
}

@JsonProperty("costMargin")
public void setCostMargin(double costMargin) {
        this.costMargin = (int)(Math.round(costMargin * 100));
}

任何人都可以帮我弄清楚如何将这个double序列化为int,而无需在setter方法中进行转换?我试图研究其他方法,例如创建一个序列化器类,并在我的Pojo中包含一个注释。例如:@JsonSerialize(using = CustomDoubleSerializer.class)

2 个答案:

答案 0 :(得分:0)

答案是:你不能这样做。

你必须通过截断或舍入某种方式将double转换为int。

在您的代码中,您只是违反了Java Bean规范。 Getter返回int,但Setter的参数为double。

如果是这样,你必须转换setter。否则你必须在调用setter之前在调用者中执行此操作。

答案 1 :(得分:0)

我最终使用了:

    @JsonSerialize(using = CustomDoubleSerializer.class)
    @JsonProperty("costMargin")
         public int getCostMargin() {
         return costMargin;
    }

致电

public class CustomDoubleSerializer extends JsonSerializer<Double> {

@Override
public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers)
        throws IOException, JsonProcessingException {
    gen.writeObject((int)(Math.round(value * 100)));
}

}

public class CustomDoubleSerializer扩展了JsonSerializer {