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

converting java string dot to float number with json annotation

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

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

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

com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type float from String ".": not a valid Float value

所以我制作了自定义 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 注释来解决这些异常?

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

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