に基づくシリアル化モデルを使用してい@JsonView
ます。私は通常、次のようにjacksonを設定しますContextResolver
:
@Override
public ObjectMapper getContext(Class<?> aClass) {
// enable a view by default, else Views are not processed
Class view = Object.class;
if (aClass.getPackage().getName().startsWith("my.company.entity")) {
view = getViewNameForClass(aClass);
}
objectMapper.setSerializationConfig(
objectMapper.getSerializationConfig().withView(view));
return objectMapper;
}
単一のエンティティをシリアル化すると、これはうまく機能します。ただし、特定のユース ケースでは、単一のエンティティと同じビューを使用して、エンティティのリストをシリアル化したいと考えています。この場合、aClass
isArrayList
であるため、通常のロジックはあまり役に立ちません。
そこで、Jackson にどのビューを使用するかを伝える方法を探しています。理想的には、次のように書きます。
@GET @Produces("application/json; charset=UTF-8")
@JsonView(JSONEntity.class)
public List<T> getAll(@Context UriInfo uriInfo) {
return getAll(uriInfo.getQueryParameters());
}
そして、それをビューの下でシリアル化しますJSONEntity
。これは RestEasy で可能ですか? そうでない場合、どうすればそれをエミュレートできますか?
編集:私は自分でシリアル化を行うことができることを知っています:
public String getAll(@Context UriInfo info, @Context Providers factory) {
List<T> entities = getAll(info.getQueryParameters());
ObjectMapper mapper = factory.getContextResolver(
ObjectMapper.class, MediaType.APPLICATION
).getContext(entityClass);
return mapper.writeValueAsString(entities);
}
ただし、これはせいぜい不器用であり、フレームワークにこのボイラープレートを処理させるという考え全体を無効にします。