$resource.save 响应 "Resource" 而不是简单的 ID

$resource.save responds with a "Resource" instead of simple ID

我认为我在一些非常简单的事情上失败了,但我无法通过阅读大量文档或其他基于 SO angular 的问题来解决我的问题......我可能是愚蠢的或什么的,所以请帮帮我,我卡住了。

查看我的以下代码,我正在编写有关销售蜂蜜的代码:

honeyFactoryModule.factory('HoneyResource', function($resource) {
    return $resource('honey/:id', {id: '@id'});
});

var saveNewHoney = function(honeyData) {
    HoneyResource.save(honey, function(newId) {
        // do important things with the ID 'newId'
    });
});

我的 Spring-MVC 后端控制器如下所示:

@RequestMapping(value = "/honey", method = RequestMethod.POST)
@ResponseBody
public long createHoney(@RequestBody final HoneyDto honeyDto) {
    // Transform and save into database
    // The service then returns the new ID (like let's say 5)
    return honeyService.create(honeyDto);
}

好的。我的后端工作,我调试它,我看到,结果是 LONG = 5。到目前为止,一切都很好。所以 FROM angular/client 的调用工作完美,响应 BACK TO angular/client 也是如此(我假设?)。但是现在我很难处理这个结果。

回到我的 angular 代码,newId 不仅仅是一个 5,而是一个 Resource-Object。看看这个屏幕来说明我的意思:

我认为这应该与结果是承诺或其他东西有关,但我只是想不出如何从这里得到我的 newID=5。 我希望我对所有内容的解释都足够详细,我也希望这对你们来说真的很简单。我通常只在 Java 后端编程,而 Angular 对我来说是很新的(以及一般的 JS)。请善待 :p

谢谢!

您正在使用save()方法的成功回调;文档说:

Success callback is called with (value, responseHeaders) arguments, where the value is the populated resource instance or collection object.

所以回调的参数是资源,而不仅仅是 id 或任何服务器 returns。需要注意的重要一点是这个参数不是由服务器定义的;服务器 return 值用于 "extend" 最初为空的资源对象。

本例中的服务器 return 是一个数字。一个数字不能扩展一个对象,这就是为什么你看到一个普通的 Resource 对象。

解决方案是让服务器方法 return 整个对象:

@RequestMapping(value = "/honey", method = RequestMethod.POST)
@ResponseBody
public HoneyDto createHoney(@RequestBody final HoneyDto honeyDto) {
    ...
    honeyDto.setId(honeyService.create(honeyDto));
    return honeyDto;
}

或者使用简单的 $http.post() 调用此方法,而不是使用 $resource.