如何将JSON参数映射到Jersey参数?

时间:2014-02-13 18:45:21

标签: java json rest jersey

我一直在苦苦挣扎,试图将一个非常简单的JSON请求绑定到使用Jersey的方法。我似乎无法找到什么问题,非常感谢任何帮助。

我的JSON请求就像这样简单:

{"user":"xyz","pwd":"123"}

我的泽西岛课程看起来像这样:

@Path("/rest")
public class JerseyService {

    @POST
    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
    @Consumes(MediaType.APPLICATION_JSON)
    @Path("authenticate.svc")
    @Transactional(readOnly = true)
    public Response authenticate(
            String user,
            String pwd) throws IOException {

        Response.ResponseBuilder responseBuilder = Response.ok();

        responseBuilder.entity(JsonSerializer.serialize(Status.SUCCESS));

        return responseBuilder.build();
    }
}

当我按原样将JSON请求发送到服务时,将“user”参数设置为整​​个JSON请求为String(user =“{\”user \“:\”xyz \“,\” pwd \“:\”123 \“}”),而pwd保持为空。

我尝试使用@QueryParam,@ FileParam和另外一个带有“user”和“pwd”的注释,但我找不到让Jersey将JSON值绑定到Java参数的方法。

我做错了什么想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用低级JSONObject或创建自己的Class来接受json参数。 以下是JSONObject的示例。

```

@Path("/rest")
public class JerseyService {

    @POST
    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
    @Consumes(MediaType.APPLICATION_JSON)
    @Path("authenticate.svc")
    @Transactional(readOnly = true)
    public Response authenticate(final JSONObject login) throws IOException {
        System.out.println(login.getString("user"));
        System.out.println(login.getString("pwd"));
        //^^^^^^^^^^^^^^^^^
        Response.ResponseBuilder responseBuilder = Response.ok();

        responseBuilder.entity(JsonSerializer.serialize(Status.SUCCESS));

        return responseBuilder.build();
    }
}

```