我有一个java webservice,用于验证唯一字段。 它需要一个字符串,并在数据库中搜索已在其中一个字段中具有该值的实体。 java Spring端点
@RequestMapping(value = "/value", method = RequestMethod.POST)
@ResponseCaching(mode = Mode.NEVER)
@ResponseBody
public Keuze findByValue(@RequestBody final String value) {
return getService().findByvalue(value);
}
angular $ resource对象是:
var resource = $resource('service/:entity/:field', {}, {
uniqueValue: {
method: 'POST',
url: 'service/:entity/:field',
cache: false
}
});
验证服务中执行验证的函数:
function uniqueValue(entity, field, value) {
return resource.uniqueValue({entity:entity,field:field}, angular.toJson(value)).$promise;
}
我在指令中调用此函数,如下所示:
validationService.uniqueValue('keuzes', 'omschrijving', viewValue).then(function(keuze) {
ctrl.$setValidity('unique', !keuze || keuze.id == scope.keuze.id);
});
我遇到的问题是,当该webservice本身返回null时,角度资源似乎返回发送到webservice的对象。只有当webservice返回一个对象时,它才能正常工作。假设用户输入值“test”,那么在指令中似乎webservice已经返回以下内容:
{
0: """,
1: "t",
2: "e",
3: "s",
4: "t",
5: """
}
检查Chrome开发人员工具清楚地表明网络服务正常运行并且没有返回任何内容。
我以前使用angular $ http实现了这个,并且工作正常。角度$ resource的这种行为是故意的,我错过了什么,或者这是一个错误?我在其他地方找不到任何其他引用这种行为,这让我觉得我做错了什么。
PS:我现在正在使用角度1.3.2。
答案 0 :(得分:0)
根据文档,您在成功处理程序中获取资源似乎是有意的: 成功时,使用相同的资源实例或集合对象解析promise,并使用来自服务器的数据进行更新。这使得在$ routeProvider.when()的resolve部分中使用它很容易推迟视图呈现,直到加载资源。