【发布时间】:2011-12-21 15:53:20
【问题描述】:
我正在通过 AJAX 从表单更新记录。我有一个映射到我的实体的 JSON 对象,我的控制器方法是:
@RequestMapping(value = "/vendors", method = RequestMethod.POST)
public ResponseEntity<String> saveVendorsJson(@RequestParam String vendor) {
Vendor v = Vendor.fromJsonToVendor(vendor);
if (v.merge() == null) {
v.persist();
}
return new ResponseEntity<String>(HttpStatus.OK);
}
我从文档中预计,如果 v.merge() 没有通过对象的“id”字段找到要合并的现有记录,它会返回 null,在这种情况下,我想将其作为新供应商保留对象。
发生的情况是,尽管我的 JSON 具有与现有记录匹配的“id”字段值,但我总是在浏览器中插入带有更新商品的新记录。
我知道我在这里使用 POST 方法 pull 双重职责,这不是严格的 RESTful。理论上,这对我来说更简单(当然事实并非如此)。
【问题讨论】:
-
我假设
Vendor是一个自定义类,它扩展了实现.merge()和.persist()的东西?您提到的实现类和“文档”是什么?如果您在上面所说的内容准确,一切看起来都正确并且应该可以工作。 -
Vendor 是一个 POJO,由 Spring-Roo 注释
@RooEntity建模,这是其persist()方法的来源。 -
我正在使用的文档是here,搜索字符串“merge”。
-
您是否验证了
v在.fromJsonToVendor(vendor)方法之后与您的JSON 字符串具有相同的ID?会不会是这个方法没有填充值,或者没有正确填充? -
@BeauGrantham - 好建议...而且 id 肯定会从 JSON 中正确填充。
标签: spring spring-roo spring-json