2016-07-04 3 views
1

클래스 Foo에서 @JsonDeserialize 및 @JsonSerialize로 주석 된 속성이 잘 작동하는 Spring (4.1.6) MVC 프로젝트가 있습니다. Foo는 RestController에서 사용되므로 Rest 호출에 의해 관리됩니다.@JsonDeserialize 및 @JsonSerialize를 재정의합니다.

Foo는 공통 모듈 내에 포함되어 있으므로 다른 모듈에서 재사용해야합니다.

Something like: 
-Web 
--Common 
-Services 
--Common(Common is used in both) 

우리는 우리가 값을 가져 @JsonDeserialize 있도록 및 서비스 모듈에서 @JsonSerialize 무시하고 동작을 재정의 할 몇 가지 방법을 서비스 module.But에 변환 ObjectMapper를 사용하는 것입니다.

내가 생각할 수있는 한 가지 옵션은 Foo를 확장하고 주석이 추가 된 속성을 무시하는 것입니다.

동일한 작업을 수행하는 다른 간단한 방법에 대한 지침이 있습니까?

답변

0

나는 잭슨 (Jackson)이 제공하는 믹스 인 (Mixin) 내의 솔루션을 얻었습니다. 역 직렬화 (직렬화 비슷한 것)을 위해 아래와 같이 우리는 믹스 인을 사용하여 주석을 대체 할 수 있습니다 :

1 단계는 우리가받은 나는 날짜를 반환 내 경우 parsing.In 날짜를 지정 논리를 쓸 수있는 DummyDateDeSerializer를 만듭니다.

2 단계. 수정 사항을 재정의해야하는 속성을 정의하는 Mixin 클래스를 만듭니다.

public abstract class DateMixin { 
    @JsonDeserialize(using=com.test.jackson.DummyDateDeSerializer.class) 
    public abstract Date getLastModifiedDate() ; 
    @JsonDeserialize(using=com.test.jackson.DummyDateDeSerializer.class) 
    public abstract Date getCreatedDate() ; 
} 

단계 3.Create DummyDateModule

public class DummyDateModule extends SimpleModule { 
    public DummyDateModule() { 
     super("DummyDateModule", new Version(0, 0, 1, null)); 
    } 

    @Override 
    public void setupModule(SetupContext context) { 
     context.setMixInAnnotations(Foo.class, DateMixin.class); 
    } 
} 

단계 4. 등록 mdoule

private static void updateMapper(ObjectMapper mapper){ 
     mapper.registerModule(new DummyDateModule()); 
    } 

이것은 createdDate 및 lastModifiedDate 속성에 대해 DummyDateDesrializer가있는 Foo 또는 수퍼 클래스에 정의 된 모든 @JsonDeserialize를 재정의합니다.

관련 문제