我目前正在进行一个使用Play Framework2.1.0的网络项目。Play支持一个不错的API来解析表单数据并将其直接映射到Model。看起来就像,
Form<Employee> form = Form.form(Employee.class).bindFromRequest();
if (form.hasErrors()) {
return badRequest(template.render(form));
}当字符串不能转换为Integer时,这个API还可以动态地进行验证,并且能够处理绑定失败。表单API保存映射到属性名称的错误集合。在Form的基础上,Play使用了Spring的验证框架的DataBinder,它实际上完成了所有的魔术。
我想知道是否有类似的绑定API可以直接从JSON转换到bean,并支持处理绑定失败?
Play 2.0在内部使用Jackson,这在绑定失败时失败,只是抛出一个异常。我看了代码,看上去不容易消除这些错误。
有什么框架可以满足我的要求吗?
从本质上说,需要从JSON转换为Java的框架,它可以优雅地处理绑定失败。
如果它允许我在某个地方收集它们,以便生成适当的验证错误,那就太好了。一旦将JSON解析到Bean中,我将使用javax.validation API对解析后的对象运行自定义验证,以执行更具体的验证。
发布于 2013-11-14 07:52:13
我通过在Jackson中添加自定义反序列化器实现了这一点。
SimpleDeserializers deserializers = new SimpleDeserializers();
deserializers.addDeserializer(Integer.class, new MyIntegerDeserializer(null));
deserializers.addDeserializer(Long.class, new MyLongDeserializer(null));
ObjectMapper mapper = new ObjectMapper().setDeserializerProvider(
new StdDeserializerProvider().withAdditionalDeserializers(deserializers));
MyModel value = mapper.treeToValue(node, MyModel.class);MyIntegerDeserializer和MyLongDeserializer分别是用于Integer和Long值的自定义反序列化器。在我的例子中,这些都是内部默认的相应反序列化器类的精确副本,并有额外的代码来优雅地处理NumberFormatException。
https://stackoverflow.com/questions/17805207
复制相似问题