2016-09-19 1 views
0

У меня есть два веб-приложения, работающие на одном экземпляре tomcat. Одним из них является приложение Spring MVC Rest, которое имеет базовую структуру, контроллер отдыха, сервисный уровень и слой DAO, который взаимодействует с postgresql. Ниже вы можете увидеть мой RestControllerMy angular frontend Приложение не может отправить запрос PUT на мое backend приложение REST

package com.hizir.acil.main.controller; 


import com.hizir.acil.main.model.Donor; 
import com.hizir.acil.main.service.DonorService; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.MessageSource; 
import org.springframework.http.HttpHeaders; 
import org.springframework.http.HttpStatus; 
import org.springframework.http.ResponseEntity; 
import org.springframework.ui.ModelMap; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.util.UriComponentsBuilder; 
import org.joda.time.*; 

import javax.validation.Valid; 

import java.util.List; 


/** 
* Created by TTTDEMIRCI on 12/29/2015. 
*/ 


@RestController 
@RequestMapping("/") 
public class AppController { 

    @Autowired 
    DonorService donorService; 

    @Autowired 
    MessageSource messageSource; 

/* 
    * This method will list all existing Donors in for JSP . 
    */ 

    @RequestMapping(value = { "/", "/listAllDonors" }, method = RequestMethod.GET) 
    public String listDonors(ModelMap model) { 

     List<Donor> donors = donorService.findAllDonors(); 
     model.addAttribute("donors", donors); 
     return "alldonors"; 
    } 
    /* 
    * This method will list all existing Donors in json format. 
    */ 
    @RequestMapping(value = { "/listjson" }, method = RequestMethod.GET, produces = "application/json") 
    public ResponseEntity<List<Donor>> listDonors() { 
     List<Donor> donors = donorService.findAllDonors(); 
     if (donors.isEmpty()) { 
      return new ResponseEntity<List<Donor>>(HttpStatus.NO_CONTENT); 
     } 
     return new ResponseEntity<List<Donor>>(donors, HttpStatus.OK); 
    } 

    /* 
    * This method will provide the medium to add a new donor. 
    */ 
    @RequestMapping(value = { "/new" }, method = RequestMethod.GET) 
    public String newDonor(ModelMap model) { 
     Donor donor = new Donor(); 
     model.addAttribute("donor", donor); 
     model.addAttribute("edit", false); 
     return "registration"; 
    } 



    //-------------------Create a Donor-------------------------------------------------------- 

    @RequestMapping(value = "/listjson", method = RequestMethod.POST) 
    public ResponseEntity<Void> createUser(@RequestBody Donor donor, UriComponentsBuilder ucBuilder) { 
     System.out.println("Creating Donor " + donor.getName()); 

//  if (donorService.isUserExist(user)) { 
//   System.out.println("A User with name " + user.getUsername() + " already exist"); 
//   return new ResponseEntity<Void>(HttpStatus.CONFLICT); 
//  } 

     donor.setCreationDate(new LocalDate()); 
      donorService.saveDonor(donor); 


      System.out.println("donor created.............."+donor.getId()); 
     HttpHeaders headers = new HttpHeaders(); 
     headers.setLocation(ucBuilder.path("/listjson/{id}").buildAndExpand(donor.getId()).toUri()); 
     return new ResponseEntity<Void>(headers, HttpStatus.CREATED); 
    } 


    //------------------- Update a donor -------------------------------------------------------- 


    @RequestMapping(method = RequestMethod.PUT) 
    public ResponseEntity<Donor> updateUser(@PathVariable("id") int id, @RequestBody Donor donor) { 
     System.out.println("Updating donor " + id); 

     Donor currentDonor = donorService.findById(id); 

//  if (currentUser==null) { 
//   System.out.println("User with id " + id + " not found"); 
//   return new ResponseEntity<User>(HttpStatus.NOT_FOUND); 
//  } 

     currentDonor.setName(donor.getName()); 
     currentDonor.setSurname(donor.getSurname()); 
     currentDonor.setBloodType(donor.getBloodType()); 

     donorService.updateDonor(currentDonor); 
     return new ResponseEntity<Donor>(currentDonor, HttpStatus.OK); 
    } 


    /* 
    * This method will be called on form submission, handling POST request for 
    * saving donor in database. It also validates the user input 
    */ 
    @RequestMapping(value = { "/new" }, method = RequestMethod.POST) 
    public String saveDonor(@Valid Donor donor, BindingResult result, 
           ModelMap model) { 

     if (result.hasErrors()) { 
      return "registration"; 
     } 


     donorService.saveDonor(donor); 

     model.addAttribute("success", "Donor " + donor.getName() + " registered successfully"); 
     return "success"; 
    } 


    /* 
    * This method will provide the medium to update an existing Donor. 
    */ 
    @RequestMapping(value = { "/edit-{id}-donor" }, method = RequestMethod.GET) 
    public String editDonor(@PathVariable int id, ModelMap model) { 
     Donor donor= donorService.findById(id); 
     model.addAttribute("donor", donor); 
     model.addAttribute("edit", true); 
     return "registration"; 
    } 

    /* 
    * This method will be called on form submission, handling POST request for 
    * updating donor in database. It also validates the user input 
    */ 
    @RequestMapping(value = { "/edit-{id}-donor" }, method = RequestMethod.POST) 
    public String updateDonor(@Valid Donor donor, BindingResult result, 
           ModelMap model, @PathVariable int id) { 

     if (result.hasErrors()) { 
      return "registration"; 
     } 

//  if(!service.isEmployeeSsnUnique(employee.getId(), employee.getSsn())){ 
//   FieldError ssnError =new FieldError("employee","ssn",messageSource.getMessage("non.unique.ssn", new String[]{employee.getSsn()}, Locale.getDefault())); 
//   result.addError(ssnError); 
//   return "registration"; 
//  } 

     donorService.updateDonor(donor); 

     model.addAttribute("success", "Donor " + donor.getName() + " updated successfully"); 
     return "success"; 
    } 


    /* 
    * This method will delete a donor by it's id value. 
    */ 
    @RequestMapping(value = { "/delete-{id}-donor" }, method = RequestMethod.GET) 
    public String deleteDonorById(@PathVariable int id) { 
     donorService.deleteDonorById(id); 
     return "redirect:/listAllDonors"; 
    } 

} 

Как вы можете видеть, что есть несколько запросов отображения. Листинг доноров и создание донора отлично работают с интерфейсом, и я могу создать нового донора и перечислить его. Но когда я пытаюсь обновить любой запрос, он не обращается к этому методу контроллера останова. Ниже приводится мое угловое обслуживание приложения frontedn.

App.factory('User', [ 
     '$resource', 
     function($resource) { 
      return $resource(
        'http://localhost:8080/HizirAcilBackendApp/listjson/:id', {id: '@id'}, { 
         update : { 
          method : 'PUT' 
         } 
        }, 
        { 
         stripTrailingSlashes: false 
        }); 
     } ]); 

и ниже мой углового контроллер

/** 
* 
*/ 
'use strict'; 

App.controller('UserController', ['$scope', 'User', function($scope, User) { 
      var self = this; 
      self.user= new User(); 

      self.users=[]; 

      self.fetchAllUsers = function(){ 
       self.users = User.query(); 

      }; 

      self.createUser = function(){ 
       self.user.$save(function(){ 
        self.fetchAllUsers(); 
       }); 
      }; 

      self.updateUser = function(){ 
       self.user.$update(function(){ 
        self.fetchAllUsers(); 
       }); 
      }; 

     self.deleteUser = function(identity){ 
      var user = User.get({id:identity}, function() { 
        user.$delete(function(){ 
         console.log('Deleting user with id ', identity); 
         self.fetchAllUsers(); 
        }); 
      }); 
      }; 

      self.fetchAllUsers(); 

      self.submit = function() { 
       if(self.user.id==null){ 
        console.log('Saving New User', self.user);  
        self.createUser(); 
       }else{ 
        console.log('Upddating user with id ', self.user.id); 
        self.updateUser(); 
        console.log('User updated with id ', self.user.id); 
       } 
       self.reset(); 
      }; 

      self.edit = function(id){ 
       console.log('id to be edited', id); 
       for(var i = 0; i < self.users.length; i++){ 
        if(self.users[i].id === id) { 
        self.user = angular.copy(self.users[i]); 
        break; 
        } 
       } 
      }; 

      self.remove = function(id){ 
       console.log('id to be deleted', id); 
       if(self.user.id === id) {//If it is the one shown on screen, reset screen 
       self.reset(); 
       } 
       self.deleteUser(id); 
      }; 


      self.reset = function(){ 
       self.user= new User(); 
       $scope.myForm.$setPristine(); //reset Form 
      }; 

     }]); 

Я пытаюсь узнать Угловой, отдых и весной все в одном месте, и я думаю, что я сделал хороший ход, но я застрял с этим запросом PUT проблема. Любая помощь и комментарий будут оценены. С уважением Туркменский

+0

Вы изучили отладчик вашего браузера для содержания запроса, отправляемого браузером. – Knu8

+0

Привет, ниже мой http-журнал. есть код ошибки 404. что может вызвать это? PUT/HizirAcilBackendApp/listjson/11 HTTP/1.1 Ведущий: локальный: 8080 Accept: приложения/JSON, текст/равнина, */* Accept-Encoding: GZIP, выкачает, SDCH Accept-Language: EN-US , ан; д = 0,8 Content-Type: применение/JSON; кодировка = UTF-8 Cookie: JSESSIONID = 8112D94E896D0CC544363849DE6C3A96 Происхождение: HTTP: // локальный: 8080 Referer: HTTP: // локальный: 8080/HizirAcilFrontEnd/DonorManagement .jsp User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; 64) HTTP/1.1 404 Not Found –

+0

PUT/HizirAcilBackendApp/listjson/11 HTTP/1.1 Хост: локальный: 8080 Accept: application/json, text/plain, */* Accept-Encoding: gzip, deflate, sdch Accept-язык: en-US, en; q = 0.8 Тип контента: application/json; charset = UTF -8 Cookie: JSESSIONID = 8112D94E896D0CC544363849DE6C3A96 Происхождение: HTTP: // локальный: 8080 Referer: HTTP: // локальный: 8080/HizirAcilFrontEnd/DonorManagement.jsp User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537,36 (KHTML, как Gecko) Chrome/47.0.2526.80 Safari/537,36 HTTP/1.1 404 Not Found Content-Язык: Content-Length: 992 –

ответ

1

Похоже, ваш RequestMapping неправильно, вы не указали путь там:

@RequestMapping(method = RequestMethod.PUT) 

Вам нужно установить apth и добавить {ID} так весна может отображать как @PathVariable

@RequestMapping(value = "/listjson/{id}", method = RequestMethod.POST) 
+0

Спасибо, Стефан. Иногда небольшие детали заставляют меня страдать часами. –

 Смежные вопросы

  • Нет связанных вопросов^_^