1 回答
TA贡献1865条经验 获得超7个赞
从OOP角度来看,我们可以为每种类型创建新类view:
class UnixFoo extends Foo {
private Foo foo;
public UnixFoo(Foo foo) {
this.foo = foo;
}
@JsonFormat(pattern = "yyyy-MM-dd")
@Override
public Date getFoo() {
return foo.getFoo();
}
// other getters
}
在我们的控制器中,我们可以:
public class MyEndpointsUnix {
@GET
@Path("/dateAsUnix")
public Foo getDateAsUnix() {
return new UnixFoo(new Foo());
}
}
当然,这个解决方案有一个缺点,我们需要复制我们的DTO类。为了避免这种情况,我们可以使用Jackson MixIn Annotation。为此,我们应该创建新接口:
interface UnixFooMixIn {
@JsonFormat(pattern = "yyyy-MM-dd")
Date getFoo();
}
并丰富ObjectMapper它:
public class MyEndpointsUnix {
@GET
@Path("/dateAsUnix")
public String getDateAsUnix() {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.addMixIn(Foo.class, UtcFooMixIn.class);
return mapper.writeValueAsString(new Foo());
}
}
在这种情况下,我们需要更改方法签名并返回String。我们也可以创建ObjectMapper一次并将其用作单例。对于每一种view我们都需要定义新的interface和新的ObjectMapper实例。
添加回答
举报