我使用Jackson
將JSON反序列化爲不可變的自定義Java對象。這裏是類:使Jackson在反序列化過程中無法將double轉換爲int
final class DataPoint {
private final int count;
private final int median;
@JsonCreator
DataPoint(
@JsonProperty("count") int count,
@JsonProperty("median") int median) {
if (count <= 0) {
throw new IllegalArgumentException("...");
}
this.count = count;
this.median = median;
}
// getters...
}
這裏是我反序列化JSON:
{
"count": 1,
"median": 2
}
它工作正常。現在,我打破了JSON,即帶有小數代替整數median
:
{
"count": 1,
"median": 0.1
}
現在,我得到count == 1
和median == 0
。相反,我希望傑克遜失敗,因爲JSON屬性median
的數據類型和正式的median
參數類型(int
)是不同的,並且轉換實際上會丟失數據。
這裏是反序列化代碼:
String json = "..."; // the second JSON
ObjectMapper mapper = new ObjectMapper()
.enable(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES)
.enable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
.enable(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE);
DataPoint data = mapper.readValue(json, DataPoint.class);
夥計們,我可以讓傑克遜desierializing十進制整數時失敗?
非常感謝您,夥計們!
非常感謝!它工作正常。只是一個littile可惜的是'2.0'不能轉換爲'2'這個功能。無論如何,它比我以前做得更好。謝謝,老兄! – danissimo