2017-03-31 1 views
0

나는 Spring Boot와 jongo/mongo를 결합하여 POJO를 사용하지 않는 동적 인 mongo 앱을 만듭니다. 데이터베이스 안팎은 모두 Map<String, Object>입니다. 나는 한 가지를 제외하고는 내가 원하는 방식으로 모든 것을 올바르게 처리한다. mongo에서 클라이언트로 _id을 보내고 싶지 않습니다. 이 시스템은 문서의 변경 내역을 유지할 수 있도록 "쓸모 없게 표시하고 새 레코드를 삽입하십시오"스타일의 업데이트 스타일을 사용합니다. 따라서 어떤 고객도 _id 필드를 사용하려고 유혹을 받고 싶지 않습니다. 다른 고객이 사용하기를 원합니다.jackson이지도의 필드를 무시하도록하십시오.

이제 pojo의 필드를 무시하는 방법에 대한 모든 종류의 예제가 있지만 맵의 특정 값을 무시하는 Jackson Map serializer를 작성하려고합니다. 나는 그런 것을 아직 못 찾는다. 나는 gson이 잘 할거라 생각합니다, 나는 현재 gson을 위해 스프링을 구성하지 않았습니다.

이 시리얼 라이저를 작성하는 방법은 무엇입니까?

답변

0

나는 Jackson이 일을 간단하게 할 수있게하려고하지 않겠다.

mongo documentation 명시 적으로 당신이 원하는 것을 정확히 어떤 반환 모든하지만 제외 된 필드라는 이름의 사용 사례가 있습니다 fieldA는 "A"로 설정된

db.inventory.find({ fieldA: "A" }, { _id: 0 }) 

가 모든 문서를 가져 오기를 모두 반환 필드를 제외하고 _id 필드.

위의 쿼리는 JavaScript Mongo 쿼리 언어이지만 Mongo Java API로 변환하는 데 문제가 있어서는 안됩니다. 프로젝트에서 Guava이있는 경우

+0

Perfect. Jongo에서 라인은'inventory.find(). projection ("{_id : 0}"). as (Map.class)' – scphantm

0

,지도를 필터링 :

Map<String, Object> filtered = Maps.filterKeys(map, (k)-> !"_id".equals(k)); 

직렬화 필터링 된지도.

구아바가 없으면지도 사본을 만드십시오. copy.remove("_id")으로 전화하십시오. 복사본을 serialize하십시오.