С точки зрения 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 .Для этого нам нужно создать новый интерфейс:
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
экземпляр.