我有一个Spring(4.1.6)MVC项目,使用@JsonDeserialize注释的属性和Foo类中的@JsonSerialize工作正常。 Foo在RestController中使用,因此由Rest调用管理。
Foo包含在一个通用模块中,因此需要在其他模块中重用。
Something like:
-Web
--Common
-Services
--Common(Common is used in both)
我们将在Services模块中使用ObjectMapper进行转换。但是我们需要如何覆盖行为,以便在Services模块中忽略@JsonDeserialize和@JsonSerialize,并且我们按原样获取值。
我能想到的一个选择是创建新的bean扩展Foo并覆盖带注释的属性。
指向其他简单方法的指针吗?
答案 0 :(得分:0)
我在杰克逊提供的Mixin中找到了解决方案。 我们可以使用mixin覆盖Annotations,如下所示,用于反序列化(序列化将类似):
步骤1.创建一个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.创建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()); }
这将覆盖Foo或其超类中使用DummyDateDesrializer定义的任何@JsonDeserialize,用于属性createdDate和lastModifiedDate。