作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 json typebinder 来将 json 转换为 Foo 类的 Java 对象。但我只希望在内容类型为 application/json 的情况下使用它,这样我就可以接受多种内容类型,而不必定义分离方法并使用 @As 注释。我基本上正在寻找一种方法来定义仅在内容类型为 application/json 时使用的@Global TypeBinder。
@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);
}
}
最佳答案
所有活页夹都存储在 Map<Class, TypeBinder>
中并在运行时根据要绑定(bind)的类型从 map 中挑选活页夹。如果您为一种类型定义了多个活页夹,则只会使用一个 - 幸运的是最后一个注册的那个。
因此,您没有其他选择来控制活页夹的选择。
您可以在 play.data.binding.Binder 类中亲自查看。
如果您想拥有不同的活页夹,您可以使用不同的中间对象,例如JsonFoo
和 XmlFoo
用适当的粘合剂。更重要的是你可以定义JsonFoo
和 XmlFoo
作为 Foo
的子类.
关于playframework - 如何使 typebinder 仅对特定内容类型有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7982006/
我正在编写一个 json typebinder 来将 json 转换为 Foo 类的 Java 对象。但我只希望在内容类型为 application/json 的情况下使用它,这样我就可以接受多种内容
我是一名优秀的程序员,十分优秀!