2011-11-02 32 views
3

我在写一个json类型绑定器来将json转换为类Foo的Java对象。但我只希望在内容类型为application/json时使用它,以便接受多种内容类型,而无需定义分离的方法并使用@As注释。我基本上正在寻找一种方法来定义@Global TypeBinder,它仅在内容类型为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

所有的粘合剂都存储在一个Map<Class, TypeBinder>,并在运行时将粘合剂从根据要绑定的类型的地图拾取。如果您为一种类型定义多个活页夹,则只会使用该活页夹 - 幸运的是最后一次注册。

因此,您没有其他选择来控制活页夹的选择。 你可以在课堂play.data.binding.Binder中看到它。

如果您想要使用不同的活页夹,可以使用不同的中间对象,例如JsonFooXmlFoo与适当的粘合剂。更重要的是,您可以将JsonFooXmlFoo定义为Foo的子类。

相关问题