programing

Jackson Java 라이브러리를 사용하여 Java 맵의 래핑을 해제하고 시리얼화할 수 없는 이유는 무엇입니까?

cafebook 2023. 4. 3. 21:43
반응형

Jackson Java 라이브러리를 사용하여 Java 맵의 래핑을 해제하고 시리얼화할 수 없는 이유는 무엇입니까?

내 콩은 이렇게 생겼다.

class MyBean {

    private @JsonUnwrapped HashMap<String, String> map = new HashMap<String, String>();

    private String name;

    public HashMap<String, String> getMap() {
        return map;
    }

    public void setMap(HashMap<String, String> map) {
        this.map = map;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

다음 코드를 사용하여 콩을 시리얼화하는 동안:

MyBean bean = new MyBean();
HashMap<String, String> map = new HashMap<String, String>();;
map.put("key1", "value1");
map.put("key2", "value2");
bean.setMap(map);
bean.setName("suren");
ObjectMapper mapper = new ObjectMapper();
System.out.println("\n"+mapper.writeValueAsString(bean));

결과는 다음과 같습니다.

{"map":{"key2":"value2","key1":"value1"},"name":"suren"}

그렇지만

{"key2":"value2","key1":"value1","name":"suren"}

Jackson Feature Unwraping 매뉴얼에 기재되어 있습니다.왜 포장되지 않은 결과가 나오지 않는 거죠?

@JsonUnwrapped지도에는 사용할 수 없습니다.게터 및 세터가 있는 적절한 POJO에만 사용할 수 있습니다.지도의 경우 및 (잭슨 버전 > = 1.6에서 사용 가능)을 사용해야 합니다.

이 경우는, 다음과 같이 시험해 주세요.

@JsonAnySetter 
public void add(String key, String value) {
    map.put(key, value);
}

@JsonAnyGetter
public Map<String,String> getMap() {
    return map;
}

이렇게 하면 지도에 직접 속성을 추가할 수도 있습니다.add('abc','xyz')새 키를 추가합니다.abc가치가 있는 지도에xyz.

잭슨 프로젝트에 대한 지원을 허용하는 미해결 문제가 있습니다.@JsonUnwrapped지도에 표시되다.

이 기능이 지원되기 전까지는@JsonAnySetter/@JsonAnyGetter다른 답변에서 제안된 것이 바람직한 방법인 것 같습니다.실제로 오픈호에서 잭슨 프로젝트 작성자가 제안하는 접근법입니다.

다음과 같습니다.

http://www.cowtowncoder.com/blog/archives/2011/07/entry_458.html

@JsonAnyGetter/setter를 사용하여 비슷한 작업을 수행할 수 있습니다.한 가지 부족한 부분은 현재 getter가 있어야 한다는 것입니다(Map filed에서는 사용할 수 없습니다). 하지만 이 문제는 쉽게 해결할 수 있을 것입니다.

@JsonAnySetter 
public void add(String key, String value) {
    map.put(key, value);
}

@JsonAnyGetter
public Map<String,String> getMap() {
    return map;
}

언급URL : https://stackoverflow.com/questions/18043587/why-im-not-able-to-unwrap-and-serialize-a-java-map-using-the-jackson-java-libra

반응형