$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
.
我认为我在一些非常简单的事情上失败了,但我无法通过阅读大量文档或其他基于 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
.