从Ajax请求获取post值时为空

时间:2015-01-26 14:11:59

标签: jquery ajax servlets rest-client

我通过Post方法在ajax中发送少量值。

$.ajax({
    url: 'api/login',
    contentType: 'application/json',
    type: 'POST',
    data: {
        sessionId: '123',
        jCryptions: 'testdata'
    },
    success: function(response) {
    }
});

在web.xml中

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>com.opentap.resource</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

在控制器

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response login(@QueryParam("sessionId") String sessionId,@QueryParam("jCryptions") String encryptedString) throws IOException {

我已将sysout置于其中。每次它返回空值。我尝试了不同的方法来接收数据,如更改QueryParam和PathParam。但都没有效果。我无法弄清楚这里有什么问题。但是,如果我通过url将数据作为POSt发送,通过firfox中的rest-client测试它,它可以工作。我需要使用AjaX

2 个答案:

答案 0 :(得分:0)

您没有发送JSON,$ .ajax不会将您的数据编码为json,您必须自己编写。

data: JSON.stringify({
    sessionId: '123',
    jCryptions: 'testdata'
}),

答案 1 :(得分:0)

您正在传递JSON数据,而在使用@Queryparam的其他服务中,这些数据会从查询字符串中提取数据。我认为您必须在下方对前端和后端进行更改。让它发挥作用。

在前端使用JSON.stringify(),将值转换为json格式

$.ajax({
    url: 'api/login',
    contentType: 'application/json',
    type: 'POST',
    data: JSON.stringify({
         sessionId: '123',
         jCryptions: 'testdata'
    }),
    success: function(response) {
    }
});

在后端只是@QueryParam无法正常工作,我认为JAX-RS中没有可以直接从JSON中提取数据的注释(See Here )。

所以创建一个模型类来表示你的json数据,如下所示。

@XmlRootElement
class JsonData{
 private String sessionId;
 private String jCryptions;

 //getter and setter
}

现在将您的服务更改为以下。

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response login(JsonData data) throws IOException {
   //---
}