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實例。
添加回答
舉報