【问题标题】:Unsupported media type 415 in angularJSangularJS 中不支持的媒体类型 415
【发布时间】:2015-12-22 03:58:25
【问题描述】:

我正在尝试发布数据,当我单击保存时,我在浏览器中收到 415 不受支持的媒体类型。我想补充的另一个观察结果是,当我使用 POSTMAN 以 JSON 格式向应用程序发送数据时,数据会保存在数据库中,并且在视图中会正常显示。如果使用上述角度代码,问题仍然存在。

js代码-

$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="/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
  }

【问题讨论】:

  • 您将一个对象作为 uri 的一部分发布。您很可能希望将其作为身体的一部分。

标签: angularjs spring spring-mvc


【解决方案1】:

路径变量只能接受字符串值。您在路径和控制器方法 addUser() 中传递“用户”,您期望用户类类型。由于这不是像 Integer 或 Float 这样的标准类型,在 Spring 中默认情况下已经提供了 String 到 Integer 转换器,因此您应该提供从 String 到 User 的转换器。

您可以参考此link 来创建和注册转换器。

正如@Shawn 所建议的,当您在请求路径中发布一个序列化对象时,将其作为请求主体传递是更简洁和更好的做法。您可以执行以下操作。

@RequestMapping(value="/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 调用中将用户作为请求正文传递。把js代码改成

//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: application/json 和 Accept: application/json 。
类似的问题发布在stackoverflow https://stackoverflow.com/a/11549679/5039001

【讨论】:

  • 好的,所以,我已经更正了上面提到的相同内容,但现在在浏览器中得到了/users/insert/ 415 (Unsupported Media Type)。控制器与上述相同,js与$http.post(urlBase + 'users/insert',$scope.user)相同。如何处理?
  • 添加这些请求头 Content-Type: application/json 和 Accept: application/json 。将 js 代码更改为 $http.post(urlBase + 'users/insert',JSON.stringify($scope.user))。类似问题发布在 stackoverflow stackoverflow.com/a/11549679/5039001
  • 您不需要任何这些标头,也不需要 JSON.stringify()。角度为你做的。只需传递对象,$http 就会将其转换为 JSON。
  • @JB Nizet,我只通过了对象。请检查我以前的cmets。
  • @prem kumar,我检查了您所说的更改。但问题仍然存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2014-10-02
  • 2014-06-21
  • 1970-01-01
  • 2014-05-10
相关资源
最近更新 更多