2016-07-29 6 views
1

У меня есть функция $ HTTP в угловой и контроллере, но контроллер не извлекать данные отправить с углового, в журнале печати

обработки

Пропустить CORS : ответ уже содержит "Access-Control-Allow-Origin" заголовок

у меня есть свой фильтр конфигурировать в web.xml файле заголовкам

response.setHeader("Access-Control-Allow-Origin", "*"); 
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
response.setHeader("Access-Control-Max-Age", "3600"); 
response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with"); 

моя угловая функция это

 app.controller('LoadCardController', function($scope, $http) { 

    $scope.executor = function() { 

     var person = { 
      name : 'Prueba', 
      todayDate : 1469679969827 
     }; 

     console.log("DATA=> ", data); 

     $http({ 
      method : 'POST', 
      url : 'http://localhost/myWeb/addPerson', 
      data : person, 
      headers : { 
       'Content-Type' : 'application/json' 
      } 
     }).then(function successCallback(response) { 
      console.log("success"); 
      console.log(response); 
     }, function errorCallback(response) { 
      console.log("error"); 
      console.log(response); 

     }); 
    } 

}); 

и мой контроллер это ...

@ResponseBody 
      @RequestMapping(path = "/addPerson", method = RequestMethod.POST) 
      public Person addPerson(final Person person) throws CustomException { 

       person.setAge("18"); 
       person.setBithDay("15"); 

       LOGGER.trace("Add person with data {}", person); 

       return person; 

      } 

      }); 
     } 

, когда приходят в контроллер, данные лица имеет нулевое значение, для имени и атрибутов todayDate, который посылает меня в угловой.

мой контроллер очень просто сейчас, потому что только возвращают один и тот же человек Objet

+0

Я не думаю, что это имеет какое-то отношение к CORS, поскольку контроллер Spring может получить запрос, как вы говорите. Вам нужно включить CORS для всех хостов? – Matt

ответ

0

Из того, что вы показали здесь, похоже, запрос проходит, но данные не делает его на ваш person параметр в методе контроллера Spring. Это может быть несколько разных причин.

Во-первых, Возможно, тело запроса не сопоставлено с параметром person вашего контроллера пружины. Вы можете сказать Spring сделать это автоматически, используя аннотацию @RequestBody (подробности here) перед параметром метода. В вашем примере:

@ResponseBody 
@RequestMapping(path = "/addPerson", method = RequestMethod.POST) 
public Person addPerson(@RequestBody Person person) throws CustomException { 

    person.setAge("18"); 
    person.setBithDay("15"); 

    LOGGER.trace("Add person with data {}", person); 

    return person; 

} 

Если это не решить, это может быть проблема с Person класса. Как минимум, он должен иметь:

public class Person { 
    private String name; 
    private String age; 
    private String bithday; 
    private Date todayDate; 

    public Person() { 
     // this depends how your serialization is set up 
    } 

    // getters and setters... 
} 

Одна конвенция использовать отдельный класс переноса данных-объект (т.е. PersonDto), который принимает данные из тела запроса и строит Person объект с ним (и наоборот), чтобы вы могли контролировать, как представление сопоставляется с бэкэнд. Подробнее об этом шаблоне here.

0

Я дам вам возможность

Ваш DTO является

public class Person { 
    private String name; 
    private String todayDate; 
    private String age; 
    private String bithDay; 
// getter and setters, etc.... 

AngularJS использовать:

// Every properties matches with your DTO, example: name, todayDate looks... 
var formData = new FormData(); 
formData.append("name", 'Prueba'); 
formData.append("todayDate" , '1469679969827'); 

console.log("DATA=> ", formData); 
$http({ 
     method : 'POST', 
      url : 'http://localhost/myWeb/addPerson', 
      data : formData, 
      headers : { 
       'Content-Type' : undefined 
      } 
     }).then(function successCallback(response) { 
      console.log("success"); 
      console.log(JSON.stringify(response)); 
     }, function errorCallback(response) { 
      console.log("error"); 
      console.log(response); 

     }); 

Ваш журнал в вашем браузере в моем случае Chrome выглядит ....

success 
myjs.js:1744 {"data":{"name":"Prueba","todayDate":"1469679969827","age":"18","bithDay":"15"},"status":200 
Смежные вопросы