当webservice返回null

时间:2015-09-02 09:11:01

标签: angularjs angular-resource

我有一个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。

1 个答案:

答案 0 :(得分:0)

根据文档,您在成功处理程序中获取资源似乎是有意的: 成功时,使用相同的资源实例或集合对象解析promise,并使用来自服务器的数据进行更新。这使得在$ routeProvider.when()的resolve部分中使用它很容易推迟视图呈现,直到加载资源。