java - 从 Jsp 发送 Json 数据到 Rest Controller 时出现 415(不支持的媒体类型错误)

标签 java jquery json rest jsp

我正在尝试将 Json 数据从 Jsp 发送到 Rest 服务 Controller 。下面是 Jsp 代码。

function send_data(){
 var pg_registration_id=document.getElementById("pg_registration_id").value;
 var mid=document.getElementById("mid").value;
 var tid=document.getElementById("tid").value;
 var request = {pg_registration_id,mid,tid};
alert("Json Data "+JSON.stringify(request));

 jQuery.ajax({
     url: "/RESTfulExample/rest/makePayment",
     type: "POST",
     data: JSON.stringify(request),  
     dataType: "json",
     beforeSend: function(x) {
       if (x && x.overrideMimeType) {
         x.overrideMimeType("application/j-son;charset=UTF-8");
       }
     },
     success: function(result) {   
     alert('Successs' +data);
     }    
});
}

下面是接受来自 Jsp 的 Post 请求的 Rest 服务 Controller 。

@Path("/")
public class RequestHandler {
 @POST
    @Path("/makePayment")
    @Consumes({MediaType.APPLICATION_JSON})
    @Produces("application/json")
    public Response merchantAuthention(final MerchantPaymentDetail  request) { 
        MerchantPayment merchantPayment = new MerchantPayment();
        return merchantPayment.merchantPayment(request);
    }

}

下面是Web.xml

<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Restful Web Application</display-name>

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.es.rest</param-value>
    </init-param>
    <init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>   
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

下面是Pom.xml

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.7</version>
</dependency>

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.7</version>
</dependency>



<!-- http://mvnrepository.com/artifact/org.json/json -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160212</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8.2</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.8</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.8</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.1.4.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate.common</groupId>
    <artifactId>hibernate-commons-annotations</artifactId>
    <version>4.0.4.Final</version>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

我在 Jsp 页面上插入了警报,警报显示了正确的 Json 数据格式,但将该 Json 格式数据发送到 Rest Controller 时,它显示了 415。

我是否缺少依赖项或 Jsp 代码中的某些内容?

最佳答案

删除“beforeSend”是不需要的,因为您已经使用dataType设置数据类型,而且json格式也是错误的。请引用下面的代码。

function send_data(){
 var pg_registration_id=document.getElementById("pg_registration_id").value;
 var mid=document.getElementById("mid").value;
 var tid=document.getElementById("tid").value;
 var request = {pg_registration_id: pg_registration_id, mid: mid, tid: tid};
     alert("Json Data "+JSON.stringify(request)); //

 jQuery.ajax({
     url: "/RESTfulExample/rest/makePayment",
     type: "POST",
     data: request,  
     dataType: "json",
     success: function(result) {   
            alert('Successs' +data);
     }
});
}

关于java - 从 Jsp 发送 Json 数据到 Rest Controller 时出现 415(不支持的媒体类型错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37740787/

相关文章:

javascript - vb.net web api $.ajax 响应不是 json 对象

java - Android Volley 错误 header 值中的意外字符 0x0a

java - android eclipse错误:Error: no resource found that matches the given name (at 'text' with value '@string/red' )

jquery $.ajax 函数使用变量 URL

javascript - 更新 html 标签中的动态 api 值的最佳实践

java - 使用java编码的json字符串无法使用php解码

java - 资源包 (Java)

java - 语句有动态表名时如何防止SQL注入(inject)?

javascript - 如何使用COOKIES jquery仅加载一次DIV

jquery - 通过jquery从submit()获取返回值