使用Jersey发送JSON字符串数组

时间:2014-11-26 08:13:43

标签: java jquery json jersey

我正在尝试发送字符串的JSON数组并在服务器端执行某些任务。 这是我的JS:

var x = ["Salam","Saghol","11"]

$.ajax({
url: '../rest/group/addusers',
type: 'POST',
data: JSON.stringify(x),
contentType: 'application/json',
dataType: 'json',
async: false,
success: function(msg) {
    alert(msg);
}
});

我的Java方法:

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/addusers")
public Response addUsersToGroup(List<String> users) {
    System.out.println(users);
    return Response.status(Response.Status.OK).entity("Salam").build();
}

当我发送请求时,我得到&#34; 415(不支持的媒体类型)&#34;错误信息。

请帮我把数组元素(字符串)传递给下面的方法。

提前致谢。

P.S。这是我的标题: enter image description here

1 个答案:

答案 0 :(得分:1)

这里的问题是&#34;用户&#34; 参数无法反序列化。虽然我的想法可能很清楚,但逻辑上的编程并不正确。

通常使用查询参数提取POST中的数据(使用&#34; =&#34;,&#34;?&#34;,&#34;&amp;&#34;作为分隔符)。在我的情况下,我将数据直接放到POST输出流。以字符串表示形式获取所有数据更合乎逻辑。

所以我将代码更改为:

@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/addusers")    
public Response addUsersToGroup(String users) throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    List<String> l = mapper.readValue(users, List.class);

    for (String s : l) {
        System.out.println("Item: "+s);
    }


    return Response.status(Response.Status.OK).entity("Salam").build();
}

问题解决了。谢谢你的关注。