У меня есть веб-сервис Java, который я использую для проверки уникальных полей. Он принимает строку и ищет в базе данных объекты, которые уже имеют это значение в одном из своих полей. Конечная точка 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);
});
Проблема, с которой я сталкиваюсь, заключается в том, что угловой ресурс, кажется, возвращает объект, который был отправлен в веб-сервис, когда сам этот веб-сервис возвращает значение null. Только когда веб-сервис возвращает объект, он работает правильно. Скажем, пользователь вводит значение «тест», тогда в директиве кажется, что веб-сервис вернул следующее:
{
0: """,
1: "t",
2: "e",
3: "s",
4: "t",
5: """
}
Проверка инструментов разработчика Chrome ясно указывает на то, что веб-сервис выполнил свою работу правильно и ничего не вернул.
Ранее я реализовал это с угловым $http, и это работало нормально. Является ли такое поведение angular $resource преднамеренным, и я что-то упустил, или это ошибка? Я не мог найти никаких других ссылок на это поведение в другом месте, что заставляет меня думать, что я делаю что-то не так.
PS: сейчас я использую angular 1.3.2.