我正在编写一个json类型绑定器来将json转换为类Foo的Java对象。但我只希望在内容类型为application / json时使用它,这样我就可以接受多种内容类型,而无需定义separates方法并使用@As注释。我基本上正在寻找一种定义@Global TypeBinder的方法,该方法仅在content-type为application / json时使用。
@Global
public class JsonObjectBinder implements TypeBinder<Foo> {
@Override
public Object bind(String name, Annotation[] annotations, String value,
Class actualClass, Type genericType) throws Exception {
return new Gson().fromJson(value, Foo.class);
}
}
答案 0 :(得分:1)
所有活页夹都存储在Map<Class, TypeBinder>
中,在运行时,根据要绑定的类型从地图中拾取活页夹。如果你为一个类型定义了多个活页夹,那么只会使用一个活页夹 - 那个幸运的是最后一个要注册的活页夹。
所以你没有其他选择来控制活页夹的选择。 您可以在play.data.binding.Binder类中自己查看。
如果您想拥有不同的活页夹,可以使用不同的中间对象,例如使用适当的活页夹JsonFoo
和XmlFoo
。您还可以将JsonFoo
和XmlFoo
定义为Foo
的子类。