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
'programing' 카테고리의 다른 글
Reactive Web Server Factory 빈이 없어 Reactive Web Application Context를 시작할 수 없습니다. (0) | 2023.04.03 |
---|---|
SQL 스크립트를 실행하고 애플리케이션 부팅 시 데이터를 얻는 방법 (0) | 2023.04.03 |
데이터를 재초기화하는 방법MVC에서 Ajax를 사용하여 서버에서 새로 가져온 데이터가 있는 테이블 (0) | 2023.03.29 |
React Native 스타일링의 구성요소 간 간격 (0) | 2023.03.29 |
PHP 팩터 30 Linux와 Windows의 성능 차이 (0) | 2023.03.29 |