【问题标题】:415 unsupported media type angularjs415 不支持的媒体类型 angularjs
【发布时间】:2016-03-31 07:41:32
【问题描述】:

我是 Angular JS 的新手。我正在尝试使用 Angular js 从 jsp 页面提交数据到 spring mvc 控制器。我正在尝试将数据注入 Pojo 对象。但我收到异常说“415 不受支持”。请帮助我哪里出错了。

JSP 页面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Testing Tool</title>
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular.min.js"></script>
<script type="text/javascript">
var apps=angular.module('sampleApps',[]);
apps.controller('formController',function($scope, $http)
        {

    $scope.register=function()
    {
        var name=$scope.name;
        var address=$scope.address;
        alert(name + " , "+address);
        var formData = {
                  name       : name,
                  address    : address
              };
         $http({
                method : "POST",
                url : "userdetails",
                contentType: 'application/json',
                mimeType: 'application/json',
                /*   data: {name: name,address:address} */  
                 data:formData
                }).then(function mySucces(response) {
                 //$scope.myWelcome = response.data;
                 alert("Success");
                }, function myError(response) {
                    alert(response);
                 // $scope.myWelcome = response.statusText;
              });   

    };

        });
</script>
</head>
<body data-ng-app="sampleApps">
 <div  ng-controller="formController">
        Name: <br/>
        <input type="text" name="name" ng-model="name"/><br/>
        Address: <br/>
        <input type="text" name="address" ng-model="address"/><br/>

        <input type="button" value="submit"  ng-click="register()">
 </div>
</body>
</html>

控制器:

@RequestMapping(value="/userdetails")
    public @ResponseBody User getUserDetails(HttpServletRequest request,@RequestBody User data)
    {
        System.out.println(data);
        return data;
    }

Pojo 类:

public class User implements Serializable
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String name;
    private String address;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

【问题讨论】:

  • 尝试使用 Angular 的 $http.post 简写,而不是您正在使用的较长符号。手动提供content-typemime-type 可能会搞砸它。
  • 即使我也使用捷径,我也会遇到同样的异常

标签: angularjs spring-mvc


【解决方案1】:

我认为你需要添加 data:formData => data:JSON.stringify(formData)

检查这是否对您有帮助

干杯!

【讨论】:

  • 嗨 Chetan,我尝试添加数据:JSON.stringify(formData)。但它仍然没有成功。我添加了罐子 jackson-jaxrs-1.9.2.jar jackson-xc-1.9.2.jar jersey-client-1.18.jar jersey-json-1.18.jar jersey-server-1.18.jar jersey-core-1.18.jar jersey-servlet-1.18.jar jsr311-api-1.1.1.jar
  • 请查看此网址stackoverflow.com/questions/17560258/… 我已经传递了一个字符串数组,您可以将其替换为您的对象,并且为了更安全,请保持两个对象与用户同名
【解决方案2】:

根据您的标签,我假设您正在使用 Spring MVC。只需为 spring web 包添加一个新的记录器。将包 org.springframework.web 的日志级别提高到 DEBUG 将为您提供 415 错误的根本原因。

这里是一个使用 logback 的例子:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework.web" level="DEBUG" />

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

您还将跟踪由您的 HTTP 请求解析的所有请求映射。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2014-10-02
    • 2014-06-21
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多