我一直在苦苦挣扎,试图将一个非常简单的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参数的方法。
我做错了什么想法?
谢谢!
答案 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();
}
}
```