当前位置: 首页 > 知识库问答 >
问题:

使用WebTarget从客户端调用rest请求。但rest资源的参数未映射到客户端模型类参数

房育
2023-03-14

我正在使用Jersey 2.0通过JAX-RS客户机调用rest请求

User request = new User("1","ABC");

webTarget = client.target(strRestURL).path("Users");

Invocation.Builder invocationBuilder =  webTarget.request(MediaType.APPLICATION_XML); 
Response setUserResponse = invocationBuilder.post(Entity.entity(request, MediaType.APPLICATION_XML)); 
String resp = setUserResponse.readEntity(String.class);

客户端的模型类如下:

import java.io.Serializable;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "request")
public class User   {
    private static final long serialVersionUID = 1L;

    private String id;
    private String Name;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id= id;
    }
    public String getName() {
        return Name;
    }
    public void setName(String name) {
        this.Name= name;
    }
}

Rest WS实现是:

@POST
@Path("/User")
@Consumes({MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_XML})
public HSServiceResponse setUsers(final User model, @Context HttpServletRequest request) throws IllegalArgumentException, IllegalAccessException {
import java.io.Serializable;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "request")
@XmlAccessorType(XmlAccessType.NONE)
public class User   {
    private static final long serialVersionUID = 1L;
    @XmlElement
    private String id;
    @XmlElement
    private String Name;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id= id;
    }
    public String getName() {
        return Name;
    }
    public void setName(String name) {
        this.Name= name;
    }
}

共有1个答案

谢璞
2023-03-14

使用@XmlElement批注的name属性。

class UserServer {
    @XmlElement(name="Name")
    private String name;
}

这使您可以更改XML元素名,而不必在Java代码中使用时髦的变量名。

对于客户端的user,XML元素的名称由Java bean属性获得,该属性是getname,删除了get并将第一个字母用小写表示。这正是JavaBean约定的工作方式。如果要更改这一点,则应在getName()方法上添加@XmlElement(Name=“name”)

class UserClient {
    @XmlElement(name="Name")
    public String getName() {
        return this.name;
    }
}
 类似资料:
  • 我有这个quarkus rest API: api工作得很好,但是如果我将此值传递给方法,rest客户端将其编码为'USSU%25OS':

  • 我正在使用Perl的REST::Client发出多部分POST请求: REST API 如下所示: 当我运行脚本时,出现以下错误: 解析多部分servlet请求失败;嵌套异常java.io.IOException:org.apache.tomcat.util.http.fileupload.FileUploadException:请求被拒绝,因为没有找到多部分边界] 我是perl新手,语法或其他方

  • 我正在尝试创建RESTful web服务,但无法使删除生效,我不确定问题在哪里。我认为问题在客户端项目中,但也可能在服务器项目的资源类中。 我有一个使用这种方法的学生道课,我不认为这是一个问题,因为它适用于其他项目。 我有一个StudentResource类,它是我从包含这段代码的模式中创建的RESTful资源 然后,我创建了一个java项目,并使用此方法创建了名为OneStudent的RESTf

  • 问题内容: 有了JSR 311及其实现,我们有了一个强大的标准,可以通过REST公开Java对象。但是,在客户端,似乎缺少与SOAP的Apache Axis类似的东西-隐藏了Web服务并将数据透明地封送回Java对象的东西。 您如何创建Java RESTful客户端?使用HTTPConnection和手动解析结果?还是专业客户(例如Jersey或Apache CXR)? 问题答案: 这是一个古老的

  • 我想在Spring WebClient请求链接中发送链接请求参数。例如: https://www.test.com/notification?con=41280440000097 我尝试了以下代码: 但是当我试图设置映射时,我在标记

  • 我注意到Rest客户端上有两个指南:MicroProfile和Vertx。既然微文件支持异步,那么使用基于Vertx的Rest客户端有什么好处?