컨텍스트에서는 대부분의 데이터를 JSON 문자열로 저장합니다. 이것은 백엔드의 Hadoop에서 잘 작동하며 프론트 엔드의 Ruby에서 처리하기 쉽습니다. 내 데이터 유형은 상속을위한 자연 패턴에 적합합니다.Java 및 Ruby를 사용하는 JSON에서의 다형성 또는 상속
간단히 말하면 애완 동물에게 먹이를주는 피드 Petet과 프로세스 Pet가 있다고 가정 해 보겠습니다. 나는 애완 동물의 종류 인 개에게만 적용되는 과정 WalkDog도 가지고 있습니다. 내 데이터는 개가 아닌 애완 동물을 걷는 것에 대해 걱정할 필요가 없도록 구성되었습니다.
애완 동물과 개가 애완 동물을 키우고 개가 "getLeash()"라는 추가 메서드가있는 것을 원합니다.하지만이를 JSON에 매핑하는 방법을 알 수는 없습니다.
대신 클래스 데이터 해시 맵이있는 클래스가 있으므로 WalkDog 프로세스는 dog.getLeash() 대신 pet.getSpeciesData ("가죽 끈")를 호출합니다.
Dog를 확장 할 수 있으며, Jackson 라이브러리를 사용하여 JSON에 직렬화 할 수 있습니다. JSON 객체에는 가죽 끈 필드가 있습니다. 그러나 나는 모든 애완 동물에게 먹이를주고 싶다고 가정한다. 모든 애완 동물에게는 getFood() 메소드가 있습니다. 따라서 FeedPet 프로세스는 개체를 Pet에 deserialize합니다. 그러나 이것은 끈 필드를 잃어 버린다.
WalkDog 프로세스는 모든 입력이 개가 될 것으로 알고 있기 때문에이를 수행 할 수 있으므로 Dog로 읽고 다시 Dog로 쓸 수 있습니다.
자바 객체를 JSON에 직렬화하여 형식을 유지할 수 있습니까? Rails의 단일 테이블 상속과 같은 것을 생각하고 있지만 JSON 라이브러리가 이해해야하는 부분이어야합니다.
내가 핵심 부분에 답변했다고 생각합니다. JSON에서이를 표현하는 표준 방법이 없습니다. JACKSON-91은 제게 원하는 것을 정확히 제공 할 것입니다. 왜냐하면 제 경우에는 Ruby에서만 데이터를 읽고 있기 때문입니다. –
아 좋아. 실제로, 당신이 자바로 그것을 읽어야 만한다면 91이 필요할 것이다. 클래스 정보를 쓰려면 더 쉬운 방법이있을 수 있습니다 (91에서도이 점을 분명히 설명 할 것입니다). 한 가지 방법은 Object.getClass()를 직렬화 가능하게 만드는 것입니다 (SerializationConfig.Feature.OUTPUT_CLASS_NAME?). – StaxMan