【问题标题】:converting java string dot to float number with json annotation使用json注释将java字符串点转换为浮点数
【发布时间】:2021-07-25 09:17:40
【问题描述】:

我尝试使用 java json 注释将字符串转换为浮点数。

public class EtlColumnPojo{
    
    @JsonProperty("value")
    private float value;
}

但是有些值字符串不是数字,而是“.”只要。所以它会抛出以下异常。

com.fasterxml.jackson.databind.exc.InvalidFormatException:无法从字符串“.”反序列化类型为 float 的值:不是有效的浮点值

所以我制作了自定义的 json 反序列化代码。

public class CustomFloatDeserializer extends JsonDeserializer<Float> {

    @Override
    public Float deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        // TODO Auto-generated method stub
        String floatString = p.getText();
        if(floatString.equals(".")) {
            return Float.valueOf(0);
        }
        
        return Float.valueOf(floatString);
    }

}

我添加了自定义反序列化器,如下所示,

public class EtlColumnPojo{
    
    @JsonDeserialize(using = CustomFloatDeserializer.class)
    @JsonProperty("value")
    private float value;
}

没有上述异常,它可以成功运行。但我想知道这些自定义 json 反序列化代码是否有效。该值仅是点,但恐怕我编写了太多代码来解决这个问题。有没有其他方法可以只用简单的 json 注释来解决这些异常?

【问题讨论】:

标签: java json jackson-databind


【解决方案1】:

如果您可以向您的EtlColumnPojo 类添加一个setter,您可以使用您正在使用的相同@JsonProperty("value") 注释或作为替代JsonSetter 注释来标记它:

@JsonProperty("value")
public void setValue(String floatString) {
    value = floatString.equals(".") ? 0 : Float.valueOf(floatString);
}

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多