RESTful 웹 서비스를 개발 중입니다.부분 빈 직렬화 및 직렬화 해제 + 병합
나는 많은 엔티티 클래스 (주로 JPA 엔티티뿐만 아니라 다른 bean)를 가지고있다.
객체 매핑, 직렬화, 바인딩 및 기타 라이브러리가 있습니다.
직렬화가 게터뿐만 아니라 객체 필드를 사용하여 지원해야한다
XML로 엔티티를 직렬화 및 JSON : 나는 나를있게 한 찾고 있어요.
반드시 보기을 지원해야합니다. 뷰를 통해 직렬화 할 엔터티의 속성 하위 집합을 지정하는 방법을 의미합니다. 예를 들어 Yahoo!의 Retrieving Partial Resources을 참조하십시오. 소셜 플랫폼 API. 나는 또한 그것이 무한히 반복적으로 반복되는 것을 원하지 않는다. :
뷰는 a) 엔티티에서 노출 될 속성과 b) 엔티티 자체 인 경우 각 뷰를 정의해야한다.
예를 들어, 엔터티
Person
은full
및simple
보기를 가질 수 있습니다.simple
뷰에Person
을 요청하면id
,firstName
및lastName
속성 만 일련 화됩니다.full
보기를 요청할 때mother
및father
(자체는Persons
) 속성도 일련 번호가 지정되지만simple
보기만으로 (따라서 조부모에게 재귀되지는 않음) 표시됩니다.JSON 직렬화는 "자연스러운"이어야합니다. 즉, Javascript에서 의미가있는 것입니다. 즉, 적절한 정수, 부울 및 null을 원하며 XML 인포 셋 전체를 캡처하려고하는 추가 객체 래퍼 또는 무언가가 필요하지 않습니다.
XML의 경우,하지 XML 스키마의
xsi:nil="true"
속성이 널 (null)을 직렬화빈 요소를 사용하는 직렬화를 구성 할 수 있어야한다.불확정
또한friends
속성 (도면에 없음) :, 어레이는 특정 뷰에 존재하지 않는 빈 어레이 및 특성을 구별하는 것이 가능하므로 중첩 된 요소를 사용하여 직렬화되어야
<person> <friends></friends> </person>
0 :
<person> </person>
빈 배열, 사람은 어떤 친구가 없습니다
역 직렬화 된 XML 및 JSON과 기존의 기관
에 데이터를 병합 지금이 어려운 부분이다.다음 두 개가 연결됩니다.
부분 객체 (뷰와 유사하지만 어떤 속성이 있는지는 미리 정의되지 않음)이 연결되어야합니다.
을 기존 속성에 병합하고 새 속성을 생성하지 않습니다.
설명하는 것이 약간 까다 롭습니다. 대부분의 라이브러리는 Java 객체로 직렬화되지만 그 당시에는 정의되지 않은 속성과 null/empty 속성 (Javascript/JSON, 위에서 설명한 XML, PHP 등 ...) 사이의 구분이 손실됩니다. ,
person.setLastName("Bon Jovi");
person.setFriends(new ArrayList());
그것은이 father
의 firstName
및/또는 명확한 실체를 만지지해야 라이브러리가해야
<person>
<lastName>Bon Jovi</lastName>
<friends></friends>
</person>
과 Person
객체를 전달되는 :
이 때이 XML을 부여하고 예를 들면.
물론 목록을 보면 더 복잡해야합니다. 중첩 된 엔티티를 업데이트할지 아니면 새 엔티티를 생성 할지를 결정할 수있는 id 속성을 구성해야합니다.
이 업데이트/패치는 라이브러리가 DTO를 반환하지 않아야하는 이유입니다. 그 당시 null
은 "설정 해제"또는 "아무 것도하지 않음"을 의미 할 수 있습니다.
글쎄, 그게 전부 야. 나는 반드시 "많이 (MUST)"많이 말했고, 나는 지금 깨닫는다. 라이브러리는 실제로 그것을 제공 할 필요는 없지만, 깨끗한 방식으로 기능을 추가 할 수있는 방법이 있어야한다. (모든 것을 다시 쓰는 방식으로는 안된다. 더 쉽게).