2017-05-05 4 views
2

나는 Jackson을 사용하여 JSON을 불변의 사용자 정의 Java 객체로 역 직렬화합니다. 여기잭슨이 JSON의 중복 속성에서 실패하게 만들기

final class DataPoint { 
    private final int count; 
    private final int lower; 
    private final int median; 
    private final int upper; 

    @JsonCreator 
    DataPoint(
     @JsonProperty("count") int count, 
     @JsonProperty("lower") int lower, 
     @JsonProperty("median") int median, 
     @JsonProperty("upper") int upper) { 
    if (count <= 0) { 
     throw new IllegalArgumentException("..."); 
    } 
    this.count = count; 
    this.lower = lower; 
    this.median = median; 
    this.upper = upper; 
    } 

    // getters... 
} 

내가 역 직렬화 json으로한다 :

{ 
    "count": 3, 
    "lower": 2, 
    "median": 3, 
    "upper": 4 
} 

그것은 잘 작동 여기에 클래스입니다. 지금은 JSON, 즉 douplicate lower 속성을 깰 :

{ 
    "count": 4, 
    "lower": 2, 
    "lower": 3, 
    "median": 4, 
    "upper": 5 
} 

는 지금은 count == 4lower == 3를 얻을. 대신, JSON (lower)에 중복 된 속성이 있기 때문에 Jackson이 탈색하지 못하도록하고 싶습니다. 내가 중복 프로퍼티 키와 JSON을 desierializing 때 Jackson이 실패 할 수 있습니다,

String json = "..."; // the second JSON 
ObjectMapper mapper = new ObjectMapper().enable(
    DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, 
    DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, 
    DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY) 
    .disable(DeserializationFeature.ACCEPT_FLOAT_AS_INT); 
DataPoint data = mapper.readValue(json, DataPoint.class); 

밥상 : 여기

는 역 직렬화 코드?

고맙습니다.

답변

1

당신이 다음과 같은 예외가 발생합니다 : 중복 특성이 있는지 파서가 Exception을 던져

String s = "{\"count\": 4,\"lower\": 2,\"lower\": 3,\"median\": 4,\"upper\": 5}"; 
ObjectMapper mapper = new ObjectMapper(); 
mapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION); 
JsonNode readTree = mapper.readTree(s); 
System.out.println(readTree.toString()); 

을 예컨대을 만들기 위해 STRICT_DUPLICATE_DETECTION을 활성화 할 수 있습니다

Exception in thread "main" com.fasterxml.jackson.core.JsonParseException: Duplicate field 'lower' 

Here's 설명서를.

+0

대단한 !!! 그것은 작동합니다! Tahnk 당신은 많이 maaan :) – danissimo