0

I want to send the json string to restful services using post method. It is being sent, but the data received at the server side has a different format. What have I missed?

This is my restful service in java

@Path("/CommonDemo")
public class CommonDemo 
{   
@POST
@Consumes(MediaType.APPLICATION_JSON)
public String result(String user)throws ServletException, IOException 
{
    System.out.println(user);
     return user;
}

}

I am calling the above service using the jquery as follows.

   var url = "http://localhost:8080/Snefocare/CommonDemo";
   var user="{'serviceInfo': [{'name':'All'}]}"; 

 $.ajax({
     type: 'POST',
      url: url,
     contentType: "application/json; charset=utf-8",
     data:{'user':user},
      success: function(data, textStatus, jqXHR) {
         alert('date'+data);

     },
     error: function(jqXHR, textStatus, errorThrown) {
         alert('error: ' + textStatus +' ERROR:'+ errorThrown);
     }
 });

I am sending it with this statement

var user="{'serviceInfo': [{'name':'All'}]}"; 

and in the restful service, I am seeing it as

user=%7B'serviceInfo'%3A+%5B%7B'name'%3A'All'%7D%5D%7D

I do not know why the % and other digits have been added.

4

3 回答 3

1

我不知道为什么要添加 % 和其他数字。

% 和数字是 URL 编码。某些字符(实际上是字节)被替换为代表字节%xxxx一对十六进制数字。

问题是您的客户端正在传递一个带有 JSON 字符串属性的 Javascript 对象。正如@ishwar 所述,您应该对其进行字符串化。

jquery.ajax文档说:

要发送到服务器的数据。如果还不是字符串,则将其转换为查询字符串。...

所以正在发生的事情是您的对象正在转换为 URL 查询字符串......完成了 URL 编码。

于 2013-09-11T06:40:41.973 回答
0

尝试数据:JSON.stringify(用户),它会工作。

于 2013-09-11T06:41:00.207 回答
0

首先,您的user变量不是合法的 JSON - 它使用了错误的字符串终止符(JSON 需要在键和字符串周围加上双引号,而不是单引号)。

其次,它会自动转换为x-www-form-urlencoded带替换的编码,%xx因为您没有告诉 jQuery 不要这样做。

尝试以下操作以在AJAX POST 请求的正文中发布“普通 JS 对象”:

var user= {'serviceInfo': [{'name': 'All'}]};  // JS object literal

$.ajax({
    type: POST,
    url: url,
    contentType: "application/json; charset=utf-8"
    data: JSON.stringify(user), // defer encoding to JSON until here
    processData: false,         // and do not URL encode the data
    ...
});
于 2013-09-11T06:58:47.797 回答