当前位置: 首页 > 面试题库 >

如何使用javax.ws.rs.client.WebTarget从REST客户端发送json对象

辛盛
2023-03-14
问题内容

我在下面给出了一个POJO,我希望将其作为JSON或XML格式放入服务器。

这就是我所做的

客户:

ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target(getBaseURI());

public void putFriend(String uri , Friend friend)
{
    System.out.println(friend.toString());

    target = target.path(some_path).path(uri);
    ClientResponse response =        target.request(MediaType.APPLICATION_JSON).put(Entity.entity(friend,MediaType.APPLICATION_JSON),ClientResponse.class);
}

我在网上发现的示例都在使用WebResource。

我不知道如何使用WebTarget。我所做的事情取自于SO上的一些示例,但Entity.entity()给出了错误的未定义方法entity(friend,String)。

POJO

@XmlRootElement
public class Friend{

    private String friendURI;
    private String event;
    private String uri;

    String getUri() {
        return uri;
    }
    void setUri(String uri) {
        this.uri = uri;
    }
    String getFriendURI() {
        return friendURI;
    }
    void setFriendURI(String friendURI) {
        this.friendURI = friendURI;
    }
    String getEvent() {
        return event;
    }
    void setEvent(String event) {
        this.event = event;
    }
public String toString() {
        return "Friend [friendURI=" + friendURI + ", uri=" + uri + ", event=" + event
                 + "]";
}

请指导如何执行此操作。

谢谢


问题答案:

泽西岛有两种不同的主要版本,分别是1.x和2.x。您似乎正在尝试同时使用两者的组合,但这将不起作用。2.x版本没有1.x中的某些类,反之亦然。

如果要使用Jersey
2.x,则应使用Response,而不是ClientResponse

Response response = target.request().put(Entity.json(friend));
                                        // .json == automatic 'application/json'
  • 请参阅使用2.x版客户端API
  • 另请参阅WebTargetAPI

基本故障。

  • 调用request()WebTarget返回一个Invocation.Buidler

    Invocation.Builder builder = target.request();
    
  • 拨打电话后put,我们会返回一个Response

    Response response = builder.put(Entity.json(friend));
    
  • 要从响应中提取已知类型,我们可以使用 readEntity(Class type)

    String responseString = response.readEntity(String.class);
    

    response.close();



 类似资料: