这是我的自定义类:
@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
有人可以帮助我,为什么我不能以编程方式进行休息通话?
答案 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));
那么它会起作用