2014-02-13 43 views
0

我一直在苦苦挣扎,试图将一个非常简单的JSON请求绑定到使用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请求到服务,因为它是“用户“参数是以整个JSON请求作为String(user =”{\“user \”:\“xyz \”,\“pwd \”:\“123 \”}“)设置的,而pwd保持为空。

我已经尝试使用@QueryParam,@FormParam与“user”和“pwd”的其他注释之间,但我无法找到一种方法让Jersey将JSON值绑定到Java参数。

任何想法我做错了什么?

谢谢!

回答

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(); 
    } 
} 

```

+0

这解决了!只需添加jersey-json依赖来导入JSONObject。谢谢! – felipecao