2016-07-04 2 views
1

У меня есть проект MVC Spring (4.1.6), свойства, аннотированные с помощью @JsonDeserialize и @JsonSerialize в классе Foo, работают нормально. Foo используется в RestController, следовательно, управляется вызовами Rest.Переопределение @JsonDeserialize и @JsonSerialize Behavior

Foo упакован в общий модуль, поэтому его необходимо использовать повторно в других модулях.

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

мы будем использовать ObjectMapper для преобразования в Услуги module.But некоторые, как нам нужно изменить поведение, так что @JsonDeserialize и @JsonSerialize игнорируются в модуле служб, и мы получаем значения, как есть.

Один из вариантов, о котором я могу думать, заключается в создании нового компонента, который расширяет Foo и отменяет аннотированные свойства.

Любые указатели на другой простой способ сделать то же самое?

ответ

0

У меня есть решение в Mixin, предоставленное jackson. Мы можем переопределить аннотации с использованием подмешать, как показано ниже для десериализации (Сериализация будет похожа):

Шага 1. Создайте DummyDateDeSerializer, где мы можем написать собственную логику на дату parsing.In моего случая я вернулся дата, как получено.

Шаг 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()); 
    } 

Это переопределит любой @JsonDeserialize, определенный в Foo или его суперклассах с DummyDateDesrializer для свойств createdDate и lastModifiedDate.

Смежные вопросы