와 지역화 된 소수 구분 기호로 부동 소수점 값을 역 직렬화하는 방법 내가 Jackson 구문 분석하고 입력 스트림은 여기에 같은 위도와 경도 값이 포함되어 서버가 쉼표 등을 사용하는 몇 가지 이유를 들어잭슨
{
"name": "product 23",
"latitude": "52,48264",
"longitude": "13,31822"
}
을 소수점의 단락 기호는 InvalidFormatException
가됩니다. 서버 출력 형식을 변경할 수 없으므로 Jackson의 ObjectMapper
에 이러한 사례를 처리하도록 알려 드리고 싶습니다. 그 좌표 값이 독일어 로케일로 올 것을
import com.fasterxml.jackson.annotation.JsonProperty;
public class Product {
@JsonProperty("name")
public String name;
@JsonProperty("latitude")
public float latitude;
@JsonProperty("longitude")
public float longitude;
}
는 어떻게 잭슨을 알 수 있습니다 : 여기에 관련 코드입니다 :
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입니까?
나는 a custom deserializer for the specific fields as discussed here 가야 할 길입니다. 나는 다음과 같은 솔루션을 함께했다
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;
}
보유한 JSON이 올바르지 않습니다. JSON을 제공하는 사람에게 법적 자료를 제공하도록하십시오. –
@HotLicks 소수점 구분 기호로','로 인해 유효하지 않습니까? 당신이 뒤에 오는 콤마를 의미하는 경우에 - 그것은 내가 입력하는 것을 잊었던 것이 었습니다. 나는 그것을 고쳤습니다. – JJD
쉼표 소수점은 유효한 JSON이 아닙니다. json.org에서 구문을 볼 수 있습니다. 어떤 이유로 든 서버에 대한 요청이 로캘을 의미하고 묵시적 로케일을 변경하면 문제가 해결 될 수 있기 때문에 쉼표가 표시 될 수 있습니다. 그렇지 않으면 다른 쪽 사람들이 해결해야합니다. –