java - 通过 Jersey 发布 JSON

标签 java web-services rest jersey jaxb2

我有这个代码

    ClientConfig config = new DefaultClientConfig();
    Client client = Client.create(config);
    client.addFilter(new HTTPBasicAuthFilter(adminUser, adminPass));
    client.addFilter(new LoggingFilter(System.out));

    WebResource service = client.resource(baseURL);
    ClientResponse clientResponse = service.path("api")
            .path("v1")
            .path("shoppers")
            .path(orderId)
            .path("status.json").accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, request);

每当我尝试发布类似的 JSON 请求时,我都会收到 HTTP 415 错误响应。对这个问题的深入研究表明,JERSEY 没有正确编码我的对象。通过添加 LoggingFilter,我可以看到在请求正文中,JAXBObject 被整理为 XML 而不是 JSON

这是 JERSEY 的已知行为吗?我应该在这里做什么?

最佳答案

您可能需要调用type()根据您设置内容类型的请求(我认为 Jersey 对此做了一些聪明的事情):

.path("status.json")
.type(MediaType.APPLICATION_JSON) // <-- This line
.accept(MediaType.APPLICATION_JSON)
.post(ClientResponse.class, request);

Other resources表明您可能需要使用 ObjectMapper 手动执行此操作:

ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(jsonObj);

关于java - 通过 Jersey 发布 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12630917/

相关文章:

javascript - AngularJS异步请求方法服务使用promise返回数据

java - 为什么Android中的java源代码有三个目录/文件夹?

java - 从 URL 中提取 HTML

java - 需要资源来从 SCRATCH 学习 Java Web 服务

java - iOS - JAVA 实现实时数据同步的最佳方法

angular - ionic 4 中的 HTTP Post 未通过网络服务

java - Android 如何在 ListView 中设置列表<String>

java - 在 Netbeans 的设计模式下编辑嵌套 JDialog

Node.js Angular Jade 客户端和 Node.js Rest API

java - AEM 上的 RESTful 服务