我有以下代码片段,我必须使用传递数据到服务器
function myFuntion() {
var myurl = 'myurl/';
var mydata = $("#myform").serializeArray();
$.ajax({
url: myurl,
type: 'POST',
contentType : "application/json; charset=utf-8",
dataType: 'json',
data: mydata,
success: function (data) {
...
}
});
}
并在服务器JERSEY代码中
@POST
@Path("/persistlogs")
public Object myMethod(@Context
UriInfo uriInfo) {
MultivaluedMap params = uriInfo.getPathParameters();
params.size() // is always null
问题是uriInfo始终为空
这可能是什么原因?
答案 0 :(得分:1)
UriInfo
主要用于从URI / URL获取信息。 getPathParameters()
返回Map
个键值对,其中键是从@Path
中的URI模板中提取的字符串。例如,@Path("{id}")
会将id
作为键,将其值作为键值。
话虽如此,您不希望来自URI的任何信息。你想要的是请求正文内容。使用application/json
,通常我们可以使用POJO对传入数据建模(如described here)。您需要确保有一个JSON提供程序来处理JSON到POJO反序列化。有关这方面的帮助,我需要知道您使用的是什么泽西版(如果您需要帮助,可以在下面发表评论)。
只是为了看到数据进入(没有POJO转换),你可以只有一个String
参数,反序列化会将JSON作为String传递给方法
@POST
@Path("/persistlogs")
@Consumes("application/json")
public Object myMethod(String jsonData) {
System.out.println(jsonData);
}
至于发送数据,我会避免使用.serializArray()
表单。你将会留下像
[
{
"name": "...",
"value": "..."
},
{
"name": "...",
"value": "..."
}
]
使用它并不是很漂亮,因为你需要类似Pair
类的东西,它实际上没有语义价值。最好只创建一个将Javascript模型对象映射到Java对象的POJO。这也在第一个链接中描述。
对于Jersey(1.x)JSON支持,添加以下Maven dependency
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.17.1</version>
</dependency>
然后在您的web.xml中配置JSON支持。
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>