REST @Context UriInfo 为空
REST @Context UriInfo is empty
我有以下代码片段,我必须使用它向服务器传递数据
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 始终为 null
这可能是什么原因?
UriInfo
主要用来获取URI/URL的信息。 getPathParameters()
return Map
键值对,其中键是从 @Path
中的 URI 模板中提取的字符串。例如 @Path("{id}")
会将 id
作为键,将其值作为键值。
也就是说,您不需要 URI 中的任何信息。你想要的是请求正文内容。使用 application/json
,一般我们可以使用 POJO 来对传入的数据进行建模(如 )。您将需要确保您有一个 JSON 提供程序来处理 JSON 到 POJO 的反序列化。如需这方面的帮助,我需要知道您使用的是什么 Jersey 版本(如果您需要帮助,可以在下面发表评论)。
只是为了查看传入的数据(没有 POJO 转换),您可以只使用 String
参数,反序列化会将 JSON 作为字符串传递给方法
@POST
@Path("/persistlogs")
@Consumes("application/json")
public Object myMethod(String jsonData) {
System.out.println(jsonData);
}
至于发送数据,我会避免使用 .serializArray()
作为表单。你将剩下 JSON 喜欢
[
{
"name": "...",
"value": "..."
},
{
"name": "...",
"value": "..."
}
]
它不是很好用,因为你需要像 Pair
class 这样的东西,它实际上没有语义价值。最好只创建一个将 Java 脚本模型对象映射到 Java 对象的 POJO。这在第一个link.
中也有描述
更新
对于 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>
我有以下代码片段,我必须使用它向服务器传递数据
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 始终为 null
这可能是什么原因?
UriInfo
主要用来获取URI/URL的信息。 getPathParameters()
return Map
键值对,其中键是从 @Path
中的 URI 模板中提取的字符串。例如 @Path("{id}")
会将 id
作为键,将其值作为键值。
也就是说,您不需要 URI 中的任何信息。你想要的是请求正文内容。使用 application/json
,一般我们可以使用 POJO 来对传入的数据进行建模(如
只是为了查看传入的数据(没有 POJO 转换),您可以只使用 String
参数,反序列化会将 JSON 作为字符串传递给方法
@POST
@Path("/persistlogs")
@Consumes("application/json")
public Object myMethod(String jsonData) {
System.out.println(jsonData);
}
至于发送数据,我会避免使用 .serializArray()
作为表单。你将剩下 JSON 喜欢
[
{
"name": "...",
"value": "..."
},
{
"name": "...",
"value": "..."
}
]
它不是很好用,因为你需要像 Pair
class 这样的东西,它实际上没有语义价值。最好只创建一个将 Java 脚本模型对象映射到 Java 对象的 POJO。这在第一个link.
更新
对于 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>