$ resource.save使用“资源”而不是简单ID进行响应

时间:2015-09-12 07:42:16

标签: javascript angularjs spring-mvc post callback

我觉得我觉得很简单,但是我无法通过阅读大量的文档或其他基于角度的问题来解决我的问题...我可能会愚蠢或者其他什么,所以请在这里帮助我,我被困住了。

请参阅我的以下代码,我正在编写关于销售蜂蜜的一些内容:

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也是如此(我假设?)。但现在我努力处理这个结果。

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

enter image description here

我认为这应该与结果是承诺或某事有关,但我无法弄清楚如何从这里获取我的newID=5。 我希望我能解释一切足够详细的东西,我也希望这对你们来说实际上是一个nobrainer。我通常只在Java Backend中编程,而Angular对我来说是个新手(以及一般的JS)。请善待:p

谢谢!

1 个答案:

答案 0 :(得分:1)

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

  

使用(value,responseHeaders)参数调用成功回调,其中值为填充的资源实例或集合对象。

因此,回调的参数是资源,而不仅仅是id或服务器返回的内容。需要注意的重要一点是,该参数不是由服务器定义的;服务器返回值用于“扩展”最初为空的资源对象。

在这种情况下,服务器返回一个数字。数字不能扩展对象,这就是为什么要查看普通的Resource对象。

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

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

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