2017-04-09 14 views
0

RestController를 사용하여 하나의 리소스를 노출하는 스프링 부트 응용 프로그램을 작성하고 있습니다.라이브러리의 사용자 정의 잭슨 직렬화

String id; String title; List<String> tags; ComplexGraphObject gObject;

내가 필요한 곳 ​​G ​​객체와 해당 필드 MainResource과에 대한 DTO들을 쓴이 작품을 만들려면 : 유일한 자원, MainResource,이 같은 것입니다. 필자는 DTO에 Jackson의 주석을 달고 도메인 모델을 반환하는 DTO-Mappers를 작성했습니다. Spring은 DTO에 대한 요청을 직렬화하고 응용 프로그램 서비스는 도메인 객체에 대한 DTO-Mappers를 호출합니다.

이제 클라이언트 및 서버 응용 프로그램에 gObject를 사용하고자하므로 gObject가 자체 라이브러리 여야한다는 것을 알았습니다.

내 목표는 :

  1. 라이브러리는 JSON/XML로 직렬화 gObjects을 가지고 도메인 개체를 반환해야합니다. 뭔가를 사용할 수있는 다른 응용 프로그램을위한 편리한 방법을 제공 직렬화 된 JSON을 도메인 gObjects을 반환해야
  2. 라이브러리/XML은
  3. 예를
  4. 을위한 봄 부팅과 같은 라이브러리와 가능한 한 원활하게 작동하도록 이미 잭슨을 사용하는 응용 프로그램을 사용 예를 들어 gson처럼

사용자 정의 jackson de/serializer를 읽은 것부터 시작하는 방법입니다. 하지만 사용자 정의 serializer, ObjectMapper, MixIns 등에서는 어떻게해야하는지 모릅니다.

편집 : mixins 목적은 내 DTO가하는 일이라고 생각하며, DTO-Mapper는 맞춤/직렬 변환기가 수행해야하는 작업을 수행하고 있습니다. 둘을 섞을 수있는 방법이 있습니까?

편집 : 중요한 부분을 깜빡했습니다. DTO-Mapper는 그래프의 각 노드에서 필요한 관계를 나타내는 행렬뿐만 아니라 DTO에서 도메인 객체를 생성하므로 적절하게 연결될 수 있습니다. 그래서 나는 custom serializer에서 그렇게 할 필요가 있다고 생각한다.

답변

1

DTO 클래스에서 주석 만 사용하는 경우 다른 스프링 프로젝트는 추가 구성없이 해당 DTO를 직렬화/비 직렬화 할 수 있습니다. 나를 위해, 이것은 직렬화를 커스터마이즈하기위한 선호되는 방법이다.

ObjectMapper의 구성을 변경하면 라이브러리 사용자도 동일한 작업을 수행해야합니다. 당신은 잭슨 모듈을 구현할 수 있습니다

@Component 
public class DateTimeModule extends SimpleModule { 

public DateTimeModule() { 
    super(DateTimeModule.class.getName(), Version.unknownVersion()); 
    //do whatever you need here.... 
    addSerializer(DateTime.class, new DateTimeSerializer()); 
    addDeserializer(DateTime.class, new DateTimeDeserializer(DateTime.class)); 
} 
} 

  • ObjectMapper 번호의 findAndRegisterModules와
  • ObjectMapper 번호의 registerModules

다른 있습니다을 ObjectMapper에 모듈을 등록해야합니다 라이브러리의 사용자 봄에 할 수있는 방법, see this post

Jackson Mixins 클래스에 대해 serialization 주석을 사용하도록 허용하면 수정할 수 없습니다. Mixins를 사용하는 경우 모듈에서 구성해야합니다.

사용자 지정 serializer를 사용하는 경우 예제와 같이 모듈에서 구성해야합니다.

그래프를 직렬화하면 사용자 정의 직렬 변환기의 유스 케이스처럼 들립니다.

+0

답변 해 주셔서 감사합니다. 이것이 제가 지향하는 방향이라고 생각합니다. 그래서 당신은 제 접근 방식을 강화하고 있습니다. 어렴풋한 문제는 XML을 생성하는 것입니다. 주석은 속성과 같은 속성을 설정하는 유일한 방법입니다. 어딘가에서 믹스 인이 필요할 것 같아요. – jam01