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



这是我的自定义类:

@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"))

但是,似乎"瑞秋"根本没有传递到请求中。

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

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

有人可以帮我为什么我不能以编程方式拨打宁静的电话吗?

您的服务应该对您的服务具有@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));

那么它会起作用

最新更新