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

如何在没有手动转换为JSON的情况下使用Jersey客户端发布Pojo?

郭曾笑
2023-03-14
问题内容

我有一个工作的json服务,看起来像这样:

@POST
@Path("/{id}/query")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(JSON)
public ListWrapper query(@Context SecurityContext sc, @PathParam("id") Integer projectId, Query searchQuery) {
    ...
    return result
}

查询对象看起来像这样,当发布该Query对象的json表示形式时,效果很好。

@XmlRootElement
public class Query {
    Integer id;
    String query;
    ... // Getters and Setters etc..
}

现在,我想从客户端填充该对象,并使用Jersey客户端将该Query对象发布到服务中,并获得一个JSONObject作为结果。我的理解是,无需先将其转换为json对象,然后将其发布为String即可完成。

我已经尝试过类似的操作,但是我想我错过了一些。

public static JSONObject query(Query searchQuery){
    String url = baseUrl + "project/"+searchQuery.getProjectId() +"/query";
    WebResource webResource = client.resource(url);
    webResource.entity(searchQuery, MediaType.APPLICATION_JSON_TYPE);
    JSONObject response = webResource.post(JSONObject.class);
    return response;
}

我正在使用Jersey 1.12。

任何对正确方向的帮助或指导将不胜感激。


问题答案:

如果您的Web服务生成JSON,则必须使用以下accept()方法在客户端中处理该JSON :

ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(searchQuery, MediaType.APPLICATION_JSON);
ListWrapper listWrapper = response.getEntity(ListWrapper.class);

试试这个,并给出您的结果。



 类似资料:
  • 问题内容: 我需要在Linux / OSX终端下使用“干净的” shell(例如bash),而无需任何用户配置,但是每次启动时,它都会从某些文件(例如〜/ .bashrc)中读取配置信息。每当我需要“干净”的外壳时,我都可以修改该文件,并在完成后将其还原,但是有没有更简单的方法来执行此操作,例如命令? 问题答案: 您可以传递和命令行选项: 您可以在手册页中找到有关这些选项的文档。

  • 我找到了这些可能的答案,但没有成功。我做错什么了吗?我确信AngularJS会提供这个功能,但是如何提供呢?

  • 问题内容: 我是AngularJS的新手,一开始,我想只使用AngularJS开发一个新的应用程序。 我正在尝试使用Angular应用程序向服务器端进行AJAX调用。 为了发送参数,我尝试了以下操作: 这是可行的,但在上也使用jQuery 。为了消除对jQuery的依赖,我尝试: 但这似乎失败了。然后我尝试了: 但这似乎也失败了。然后我尝试了: 我找到了这些可能的答案,但未成功。难道我做错了什么?

  • 问题内容: 所有HTTP响应都要求客户端启动它们,即使是使用AJAX进行的响应。但是,即使我只是坐在舒适的电脑椅上看着但不与浏览器进行交互,GMail的聊天功能仍能够接收来自其他用户的消息。他们是如何做到的呢? 问题答案: 该技术被称为“ comet”,但也被称为“ server push”,“ reverse ajax”等。 这是关于将数据从服务器推送到浏览器,并保持http连接保持活动状态。在

  • 问题内容: 我正在学习使用Selenium(v2.20)来领先一些 即将使用它创建浏览器测试的程序员。我想在 陷阱到达之前发现它们,而我却跌入了一个陷阱。 当我创建ChromeDriver时,它始终会弹出“ Google Chrome EULA”并 显示两个按钮:“接受并运行”和“取消”。因为我希望这是一个 自动化测试,所以让用户单击按钮是不可能的。 我查看了Chromium CommandSwi

  • 问题内容: 我从 JavaEE 6中 了解到,它是可选的。 因此,如果没有 web.xml ,如何告诉应用程序服务器使用Jersey作为JAX-RS规范的实现? 问题答案: 就如何在没有web.xml的情况下实现应用程序配置而言,@AlexNevidomsky的回答是正确的。您在子类上使用注释。 有关部署选项的更多信息,请参见JAX-RS规范-> 2.3发布-> 2.3.2Servlet。 或更常