如何使打字机仅对特定内容类型有效?

时间:2011-11-02 14:30:03

标签: playframework

我正在编写一个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);
    }
}

1 个答案:

答案 0 :(得分:1)

所有活页夹都存储在Map<Class, TypeBinder>中,在运行时,根据要绑定的类型从地图中拾取活页夹。如果你为一个类型定义了多个活页夹,那么只会使用一个活页夹 - 那个幸运的是最后一个要注册的活页夹。

所以你没有其他选择来控制活页夹的选择。 您可以在play.data.binding.Binder类中自己查看。

如果您想拥有不同的活页夹,可以使用不同的中间对象,例如使用适当的活页夹JsonFooXmlFoo。您还可以将JsonFooXmlFoo定义为Foo的子类。