使用 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);
}
我尝试使用 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);
}