我通过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
答案 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 {
//---
}