java - 未找到 Java 类型的消息正文编写器 mime 类型 application/x-www-form-urlencoded

标签 java rest client jersey-client

我知道这个问题以前曾被问过,但没有一个答案适合我的情况。所以我必须寻求帮助。 我是 JERSEY 的新手,我应该创建一个连接到服务并从中获取 token 的休息客户端。 代码如下:

 public String getToken() {
        String urlToken = "http://example.com";
        Client client = Client.create();
        Map<String, String> params = new HashMap<String, String>();
        params.put("username","username" );
        GenericEntity<Map<String, String>> entity = new GenericEntity<Map<String, String>>(params){};
        client.addFilter(new LoggingFilter());
        WebResource webResource = client.resource(UriBuilder.fromUri(urlToken).build());
        String response = webResource
                .type("application/x-www-form-urlencoded")
                .post(String.class,entity);


        return response;
    }

错误如下:

HTTP Status 500 - com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class java.util.HashMap, and MIME media type, application/x-www-form-urlencoded, was not found


com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class java.util.HashMap, and MIME media type, application/x-www-form-urlencoded, was not found
    com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:288)
    com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:217)
    com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:153)
    com.sun.jersey.api.client.filter.LoggingFilter.handle(LoggingFilter.java:217)
    com.sun.jersey.api.client.Client.handle(Client.java:652)
    com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
    com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570)
    com.sgss.nove.service.tableau.impl.TableauManager.getToken(TableauManager.java:27)
    com.sgss.nove.server.TableauServlet.doGet(TableauServlet.java:52)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    com.sgss.nove.UserSessionControlFilter.doFilter(UserSessionControlFilter.java:130)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
    com.sgss.nove.GWTCacheControlFilter.doFilter(GWTCacheControlFilter.java:56)
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

最佳答案

您需要使用MultivaluedMap ,而不是参数的 HashMap 。他们这样做的原因是因为表单参数键可以使用不同的值重复多次。例如a=1&a=2&a=3。另外,您在这里不需要 GenericEntity

MultivaluedMap params = new MultivaluedMapImpl();
params.add("username", "username");

String response = webResource
                .type("application/x-www-form-urlencoded")
                .post(String.class, params);

关于java - 未找到 Java 类型的消息正文编写器 mime 类型 application/x-www-form-urlencoded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50005288/

相关文章:

java - 为什么不调用改造 validator ?

java - org.mockito.exceptions.misusing.InvalidUseOfMatchersException :Misplaced argument matcher

java - 调试 Java 代理

json - Web API 2 Json 输出小写和下划线

json - 如何在 Controller 中调用 web api 并返回 View MVC4

java - 无法将数据从 obj-c 客户端发送到 java 服务器

java - HashMap的大小

php - 我们可以创建自定义 HTTP 描述吗?

jquery - 删除 Ajax 在本地主机中有效,但在生产托管中无效

Java - 客户端从服务器接收空白消息,但仅通过网络