Angularjs ngResource — это модуль angularjs для взаимодействия со службами на основе REST. Я недавно использовал его для небольшого проекта со Spring MVC и хотел задокументировать конфигурацию, которая хорошо работала для меня.
Контроллер работает на заводе, он поддерживает операции CRUD на объекте Hotel и поддерживает следующие методы:
- POST / rest / hotels — создает гостиницу
- GET / отдых / отели — получает список объектов отеля
- GET / rest / hotels /: id — получает объект с указанным Id
- PUT / отдых / отели /: id — обновляет сущность
- DELETE / rest / hotels /: id — удаляет объект с указанным идентификатором
Это может быть реализовано следующим образом с помощью Spring MVC:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | @RestController@RequestMapping("/rest/hotels")publicclassRestHotelController { privateHotelRepository hotelRepository;  @Autowired publicRestHotelController(HotelRepository hotelRepository) {  this.hotelRepository = hotelRepository; } @RequestMapping(method=RequestMethod.POST) publicHotel create(@RequestBody@ValidHotel hotel) {  returnthis.hotelRepository.save(hotel); } @RequestMapping(method=RequestMethod.GET) publicList<Hotel> list() {  returnthis.hotelRepository.findAll(); } @RequestMapping(value="/{id}", method=RequestMethod.GET) publicHotel get(@PathVariable("id") longid) {  returnthis.hotelRepository.findOne(id); }  @RequestMapping(value="/{id}", method=RequestMethod.PUT) publicHotel update(@PathVariable("id") longid, @RequestBody@ValidHotel hotel) {  returnhotelRepository.save(hotel); }  @RequestMapping(value="/{id}", method=RequestMethod.DELETE) publicResponseEntity<Boolean> delete(@PathVariable("id") longid) {  this.hotelRepository.delete(id);  returnnewResponseEntity<Boolean>(Boolean.TRUE, HttpStatus.OK); }} | 
Обратите внимание на аннотацию @RestController, это новая аннотация, представленная в Spring Framework 4.0, с этой аннотацией, указанной на контроллере, аннотации @ResponseBody для каждого из методов можно избежать.
На стороне angularjs модуль ngResource может быть настроен на заводе следующим образом, чтобы использовать этот сервис:
| 1 2 3 4 5 6 7 | app.factory("Hotel", function ($resource) {    return$resource("/rest/hotels", {id: "@id"}, {        update: {            method: 'PUT'        }    });}); | 
Единственное изменение конфигурации по умолчанию заключается в указании дополнительного действия «обновление» с помощью метода HTPP вместо POST. С этим изменением к REST API можно получить доступ следующим образом:
POST / отдых / отели переводится как:
| 1 2 | var hotel = newHotel({name:"test",address:"test address", zip:"0001"});hotel.$save(); | 
Или другой вариант этого:
| 1 | Hotel.save({}, {name:"test",address:"test address", zip:"0001"}); | 
GET / отдых / отели переводится как:
| 1 | Hotel.query(); | 
GET / rest / hotels /: id переводится как:
| 1 | Hotel.get({id:1}) | 
PUT / отдых / отели /: id переводится как:
| 1 2 | var hotel = newHotel({id:1, name:"test",address:"test address", zip:"0001"});hotel.$update(); | 
DELETE / rest / hotels /: id переводится как:
| 1 2 | var hotel = newHotel({id:1});hotel.$delete(); | 
ИЛИ ЖЕ
| 1 | Hotel.delete({id:1}); | 
Для обработки успешных и неудачных результатов просто передайте дополнительные обработчики обратного вызова:
например, с созданием:
| 1 2 3 4 5 6 | var hotel = newHotel({name:"test",address:"test address", zip:"0001"});hotel.$save({},function(response){  //on success}, function(failedResponse){  //on failure}); | 
- Полный рабочий образец CRUD с angularjs и Spring MVC доступен по адресу github : https://github.com/bijukunjummen/spring-boot-mvc-test/tree/withangular
| Ссылка: | Spring Rest Controller с ресурсом angularjs от нашего партнера по JCG Бижу Кунджуммен в блоге all and sundry. |