我正在使用Jackson解析的输入流中包含了类似这样的纬度和经度值:
{
"name": "product 23",
"latitude": "52,48264",
"longitude": "13,31822"
}
由于某些原因,服务器使用“逗号”作为小数点分隔符,这会导致“InvalidFormatException”。由于我无法更改服务器输出格式,所以我希望教会Jackson的“ObjectMapper”处理这些情况。以下是相关代码:
public static Object getProducts(final String inputStream) {
ObjectMapper objectMapper = new ObjectMapper();
try {
return objectMapper.readValue(inputStream,
new TypeReference<Product>() {}
);
} catch (UnrecognizedPropertyException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (JsonParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
这里是POJO:
import com.fasterxml.jackson.annotation.JsonProperty;
public class Product {
@JsonProperty("name")
public String name;
@JsonProperty("latitude")
public float latitude;
@JsonProperty("longitude")
public float longitude;
}
我该如何告诉Jackson这些坐标值是使用德语区域设置的?
我认为根据此处讨论,为特定字段编写自定义反序列化器是正确的方法。我起草了以下内容:
public class GermanFloatDeserializer extends JsonDeserializer<Float> {
@Override
public Float deserialize(JsonParser parser, DeserializationContext context)
throws IOException {
// TODO Do some comma magic
return floatValue;
}
}
那么POJO看起来会像这样:
import com.fasterxml.jackson.annotation.JsonProperty;
public class Product {
@JsonProperty("name")
public String name;
@JsonDeserialize(using = GermanFloatDeserializer.class, as = Float.class)
@JsonProperty("latitude")
public float latitude;
@JsonDeserialize(using = GermanFloatDeserializer.class, as = Float.class)
@JsonProperty("longitude")
public float longitude;
}
,
作为小数点而导致无效吗?如果你指的是末尾的逗号,那是我忘记打了。我已经修复了。 - JJD