java - 使用 Jersey 为 REST Web 服务发送 HashMap

标签 java web-services jersey

我将 Jersey 用于 REST 网络服务。 我想向服务器发送一个 HashMap,但是我遇到了问题。如果我将方法的参数更改为 String,此代码可以正常工作,但是对于 HashMap,它不起作用:

    ClientConfig config = new DefaultClientConfig();
    config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
    Client client = Client.create(config);

    URI uri = UriBuilder.fromUri("http://localhost:8081/serviceProxy_socle-01.00.00-SNAPSHOT/services/tableauDeBord/subventions").build();
    System.out.println(uri.toString());
    WebResource service = client.resource(uri);

    GenericType<TableauDeBordImpl<CoupsDPouceImpl>> informationsDossier = new GenericType<TableauDeBordImpl<CoupsDPouceImpl>>(){};


    HashMap<String, Object> params = new HashMap<String, Object>();
    params.put("rne", "0240984P");

    TableauDeBordImpl<CoupsDPouceImpl> content = service
    .accept(MediaType.APPLICATION_JSON)
    .entity(params, MediaType.APPLICATION_XML)
    .type(MediaType.APPLICATION_XML).post(informationsDossier);

这是堆栈跟踪:

Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class java.util.HashMap, and MIME media type, application/xml, was not found
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:148)
    at com.sun.jersey.api.client.Client.handle(Client.java:642)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:613)
    at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:503)
    at fr.liberaccess.pool.tester.Tester.testCoupsDpouce(Tester.java:63)
    at fr.liberaccess.pool.tester.Tester.<init>(Tester.java:39)
    at fr.liberaccess.pool.tester.Tester.main(Tester.java:188)
Caused by: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class java.util.HashMap, and MIME media type, application/xml, was not found
    at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:299)
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:203)
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:146)
    ... 7 more

最佳答案

您需要创建一个 MessageBodyWriter并将该类注释为提供者。

您还需要将新提供商的信息告知 Jersey。

来自用户指南。

ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(PlanetJAXBContextProvider.class);
Client c = Client.create(cc);

关于java - 使用 Jersey 为 REST Web 服务发送 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6843701/

相关文章:

Java addShutdownHook 方法

java - Jersey 2.26 : Defining Custom Injection Annotation

android - 使用 Volley 实现带有 Recyclerview 的 JSON 对象

php - 将 http 转换为 https

java - 如何在 NetBeans 8.1 中禁用烦人的警告/提示

java - 使用 hibernate 和 jersey JSP viewables 实现按请求 session + 延迟获取

java - 用于验证国际电子邮件的正则表达式

java - 这是显示图像的 REST 合规方式吗?

java - 设计帮助安排文件轮询和 API 调用

web-services - 在 Alfresco 4.0.d 中生成缩略图