如何在我的webservice中使用json参数,我可以使用@PathParam获取参数但是获取json数据作为参数不知道该怎么做。
@GET
@Path("/GetHrMsg/json_data")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces(MediaType.APPLICATION_JSON)
public String gethrmessage(@PathParam("emp_id") String empid) {
}
代替@PathParam使用什么以及稍后如何解析它。
答案 0 :(得分:15)
我假设您正在讨论使用随请求发送的JSON邮件正文。
如果是这样,请注意虽然没有被禁止,但普遍认为GET请求不有请求正文。请参阅" HTTP GET with request body"解释原因的问题。
我之所以提到这一点,只是因为您的示例显示了GET请求。如果您正在进行POST或PUT,请继续阅读,但如果您确实在项目中执行了GET请求,我建议您改为关注kondu's solution。
话虽如此,要使用JSON或XML消息体,请包含一个(未注释的)方法参数,该参数本身就是表示消息的JAXB bean。
因此,如果您的邮件正文如下所示:
{"hello":"world","foo":"bar","count":123}
然后,您将创建一个如下所示的相应类:
@XmlRootElement
public class RequestBody {
@XmlElement String hello;
@XmlElement String foo;
@XmlElement Integer count;
}
您的服务方法如下:
@POST
@Path("/GetHrMsg/json_data")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public void gethrmessage(RequestBody requestBody) {
System.out.println(requestBody.hello);
System.out.println(requestBody.foo);
System.out.println(requestBody.count);
}
哪个会输出:
world
bar
123
有关使用JAXB使用不同类型的HTTP数据的更多信息,我建议您查看问题" How to access parameters in a RESTful POST method",它有一些很棒的信息。
答案 1 :(得分:5)
Bertag对GET的评论是正确的。但是如果你想做消耗json数据的POST请求,那么你可以参考下面的代码:
@POST
@Path("/GetHrMsg/json_data")
@Consumes(MediaType.APPLICATION_JSON)
public Response gethrmessage(InputStream incomingData) {
StringBuilder crunchifyBuilder = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new InputStreamReader(incomingData));
String line = null;
while ((line = in.readLine()) != null) {
crunchifyBuilder.append(line);
}
} catch (Exception e) {
System.out.println("Error Parsing: - ");
}
System.out.println("Data Received: " + crunchifyBuilder.toString());
// return HTTP response 200 in case of success
return Response.status(200).entity(crunchifyBuilder.toString()).build();
}
请参考click here
答案 2 :(得分:4)
@PathParam
用于将URL的一部分作为参数进行匹配。例如,在http:/example.com/books/{bookid}
形式的网址中,您可以使用@PathParam("bookid")
将图书的ID提取给方法。
@QueryParam
用于访问URL的查询字符串中的键/值对(后面的部分?)。例如,在网址http:/example.com?bookid=1
中,您可以使用@QueryParam("bookid")
来获取`bookid的值。
当请求网址包含有关参数的一些信息时,可以使用这些参数,您可以直接在方法中使用数据。
如果此帖对您没有帮助,请详细说明问题。