2015-12-22 7 views
1

Я пытаюсь опубликовать данные, когда я нажимаю на сохранение. Я получаю 415 неподдерживаемых типов носителей в браузере. Еще одно замечание, которое я хотел бы добавить, заключается в том, что когда я отправляю данные с помощью POSTMAN в приложение в формате JSON, данные сохраняются в базе данных и прекрасно смотрятся в представлении. При использовании вышеуказанного углового кода проблема все еще сохраняется.Неподдерживаемый тип материала 415 в angularJS

код расслоение плотной -

$scope.addUser = function addUser() { 
var user={}; 
console.log("["+$scope.user.firstName+"]"); 
     $http.post(urlBase + 'users/insert/',$scope.user) 
      .success(function(data) { 
      $scope.users = data; 
      $scope.user=""; 
      $scope.toggle='!toggle';    
      }); 
     }; 

код контроллера -

@RequestMapping(value="https://stackoverflow.com/users/insert",method = RequestMethod.POST,headers="Accept=application/json") 
    public @ResponseBody List<User> addUser(@RequestBody User user) throws ParseException {  
     //get the values from user object and send it to impl class 
    } 
+0

Вы отправляете объект как часть uri. Вы, скорее всего, хотите иметь его как часть тела. –

ответ

1

переменная Path может принимать только строковые значения. вы передаете «пользователь» в пути и в методе Controller, addUser(), вы ожидаете от класса «Пользователь». Поскольку это не стандартный тип типа Integer или Float, для которого конвертеры String to Integer уже доступны по умолчанию весной, вы должны предоставить конвертер от String to User.

Вы можете сослаться на этот link для создания и регистрации преобразователей.

Как было предложено @Shawn, поскольку вы отправляете сериализованный объект в путь запроса, более чистая и лучшая практика передает его в качестве тела запроса. Вы можете сделать что-то вроде следующего.

@RequestMapping(value="https://stackoverflow.com/users/insert",method = RequestMethod.POST,headers="Accept=application/json") 
public List<User> addUser(@RequestBody User user) throws ParseException { 
    //get the values from user object and send it to impl class 
} 

И передайте пользователя в качестве тела запроса в вашем ajax-вызове. Change код расслоение плотной

//you need to add request headers 
$http.post(urlBase + 'users/insert',JSON.stringify($scope.user)).success... 

или

//with request headers 
$http({ 
    url: urlBase + 'users/insert', 
    method: "POST", 
    data: JSON.stringify($scope.user), 
    headers: {'Content-Type': 'application/json','Accept' : 'application/json'} 
    }).success(function(data) { 
     $scope.users = data; 
     $scope.user=""; 
     $scope.toggle='!toggle';    
     }); 
}; 

Добавьте эти заголовки запроса Content-Type: приложения/JSON и Accept: приложения/JSON.
Аналогичная проблема размещена в stackoverflow https://stackoverflow.com/a/11549679/5039001

+0

ok, Итак, я скорректировал то же, что упоминалось выше, но теперь получаю '/ users/insert/415 (Unsupported Media Type)' в браузере. контроллер аналогичен указанному, а js - как «$ http.post (urlBase +« пользователи/вставка », $ scope.user). Как справиться с этим? – Harshit

+0

Добавьте эти заголовки запроса Content-Type: application/json и Accept: application/json. изменить js-код на $ http.post (urlBase + 'users/insert', JSON.stringify ($ scope.user)). Аналогичная проблема опубликована в stackoverflow http://stackoverflow.com/a/11549679/5039001 –

+0

Вам не нужен ни один из этих заголовков, ни JSON.stringify(). это угловато для вас. Просто передайте объект, и $ http преобразует его в JSON. –

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