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

有关参考,请单击此处