2011-11-02 61 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的子類。

相關問題