小编典典

如何在Java Restful Service中使用json参数

json

我如何在我的Web服务中使用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以及以后如何解析。


阅读 532

收藏
2020-07-27

共1个答案

小编典典

我假设您正在谈论使用随请求发送的JSON消息正文。

如果是的话,请注意,虽然不是完全禁止的,有一个普遍的共识是GET请求应该 不会 有请求主体。有关原因的说明,请参见“ 带有请求正文的HTTPGET”问题。

我之所以仅提及这是因为您的示例显示了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方法中访问参数
”,该问题有一些不错的信息。

2020-07-27