如何在java restful服务中使用json参数
我如何在我的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以及以后如何解析它。
我假设您正在讨论使用随请求发送的JSON消息正文。
如果是这样,请注意虽然并非完全禁止,但普遍认为GET请求不应该有请求机构。 有关解释原因,请参阅“ 带请求正文的HTTP GET ”问题。
我之所以提到这一点,只是因为您的示例显示了GET请求。 如果您正在进行POST或PUT,请继续阅读,但如果您确实在项目中执行GET请求,我建议您改为遵循kondu的解决方案 。
话虽如此,要使用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数据的更多信息,我建议您查看“ 如何访问RESTful POST方法中的参数 ”这一问题,其中包含一些很棒的信息。
@PathParam
用于匹配URL的一部分作为参数。 例如,在http:/example.com/books/{bookid}
forms的url中,您可以使用@PathParam("bookid")
将图书的ID @PathParam("bookid")
给方法。
@QueryParam
用于访问URL的查询字符串中的键/值对(后面的部分?)。 例如,在URL http:/example.com?bookid=1
,您可以使用@QueryParam("bookid")
来获取`bookid的值。
当请求URL包含有关参数的一些信息时,可以使用这两个参数,您可以直接在方法中使用这些数据。
如果这篇文章对您没有帮助,请详细说明问题。
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(); }
有关参考,请单击此处