我是靠谱客的博主 糊涂宝贝,最近开发中收集的这篇文章主要介绍java更新部分数据_Spring部分更新对象数据绑定,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们正在尝试在Spring 3.2中实现一个特殊的部分更新功能 . 我们使用Spring作为后端,并有一个简单的Javascript前端 . 我无法找到满足我们要求的直接解决方案,即update()函数应该采用任意数量的字段:值并相应地更新持久性模型 .

我们对所有字段进行内联编辑,因此当用户编辑字段并确认时,id和修改后的字段将作为json传递给控制器 . 控制器应该能够从客户端(1到n)接收任意数量的字段并仅更新这些字段 .

例如,当id == 1的用户编辑他的displayName时,发布到服务器的数据如下所示:

{"id":"1", "displayName":"jim"}

目前,我们在UserController中有一个不完整的解决方案,如下所述:

@RequestMapping(value = "/{id}", method = RequestMethod.POST )

public @ResponseBody ResponseEntity update(@RequestBody User updateUser) {

dbUser = userRepository.findOne(updateUser.getId());

customObjectMerger(updateUser, dbUser);

userRepository.saveAndFlush(updateUuser);

...

}

这里的代码有效,但有一些问题: @RequestBody 创建一个新的 updateUser ,填入 id 和 displayName . CustomObjectMerger 将此 updateUser 与数据库中相应的 dbUser 合并,更新 updateUser 中包含的唯一字段 .

问题是Spring使用默认值和其他自动生成的字段值填充 updateUser 中的某些字段,这些字段值在合并时会覆盖 dbUser 中的有效数据 . 明确声明它应该忽略这些字段不是一个选项,因为我们希望我们的 update 能够设置这些字段 .

我正在寻找一些方法让Spring自动合并显式发送到 update() 函数的信息到 dbUser (不重置默认/自动字段值) . 有没有简单的方法来做到这一点?

Update: 我've already considered the following option which does almost what I'米要求,但不完全 . 问题是它将更新数据作为 @RequestParam 并且(AFAIK)不执行JSON字符串:

//load the existing user into the model for injecting into the update function

@ModelAttribute("user")

public User addUser(@RequestParam(required=false) Long id){

if (id != null) return userRepository.findOne(id);

return null;

}

....

//method declaration for using @MethodAttribute to pre-populate the template object

@RequestMapping(value = "/{id}", method = RequestMethod.POST )

public @ResponseBody ResponseEntity update(@ModelAttribute("user") User updateUser){

....

}

我已经考虑重新编写我的 customObjectMerger() 以更合适地使用JSON,计算并仅考虑来自 HttpServletRequest 的字段 . 但是,即使不得不首先使用 customObjectMerger() ,当 Spring 天提供的几乎正是我正在寻找的东西时,也会感到hacky,减去缺少的JSON功能 . 如果有人知道如何让Spring做到这一点,我将非常感激!

最后

以上就是糊涂宝贝为你收集整理的java更新部分数据_Spring部分更新对象数据绑定的全部内容,希望文章能够帮你解决java更新部分数据_Spring部分更新对象数据绑定所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部