首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Json的弹簧DataBinder等价

Json的弹簧DataBinder等价
EN

Stack Overflow用户
提问于 2013-07-23 08:35:02
回答 1查看 888关注 0票数 1

我目前正在进行一个使用Play Framework2.1.0的网络项目。Play支持一个不错的API来解析表单数据并将其直接映射到Model。看起来就像,

代码语言:javascript
复制
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对解析后的对象运行自定义验证,以执行更具体的验证。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-14 07:52:13

我通过在Jackson中添加自定义反序列化器实现了这一点。

代码语言:javascript
复制
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);

MyIntegerDeserializerMyLongDeserializer分别是用于IntegerLong值的自定义反序列化器。在我的例子中,这些都是内部默认的相应反序列化器类的精确副本,并有额外的代码来优雅地处理NumberFormatException

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17805207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档