Jax-rs如何使用自定义对象参数处理POST请求(以编程方式而不是WebBrowser)

时间:2017-07-25 03:45:26

标签: java rest jax-rs

这是我的自定义类:

@XmlRootElement
class Request{
    private String name;
    private String age;

    public Request(){

    }

    public Request(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return this.name;
    }

}

这是我的服务:

@PATH("/webapp/")
class RestService{

    @POST
    @Produces(MediaType.APPLICATION_XML)
    @PATH("getNameFromRequest")
    public String getNameFromRequest(@FormPara Request request) {
        System.out.println(request.getName())  //Here request.getName() is null !!!
        return request.getName();
    }
}

这是我使用JAXRSClientFactory创建的客户端服务以编程方式进行restful调用的方法

RestService service = JAXRSClientFactory.create("http://test:8080", RestService.class);

service.getNameFromRequest(new Request("Rachel","23"))

然而,似乎“Rachel”根本没有传递给请求。

如果我使用Web浏览器对此进行请求,则会设置名称:

http://test:8080/webapp?name=Rachel

有人可以帮助我,为什么我不能以编程方式进行休息通话?

1 个答案:

答案 0 :(得分:0)

您的服务应该在您的服务上添加@Consumes注释

像这样

@PATH("/webapp/")
class RestService{
@POST
@Consumens(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
@PATH("getNameFromRequest")
public String getNameFromRequest(JAXBElement<Request> request) {
    System.out.println(request.getName()) ; 
    return request.getName();
}

}

此服务的路径为http://<hostname or ip adderss:8080 if default configuration >/<your app root folder name or root path>/webapp/getNameFromRequest

和客户端代码就像

Request request = new Request("Rachel","23");


webTarget.path("webapp/getNameFormRequest").post(new JAXBElement<Request>(new QName("Request"), Request.class, request));

那么它会起作用