Автор тела сообщения для типа Java не был найден mime-тип application / x-www-form-urlencoded - PullRequest
0 голосов
/ 24 апреля 2018

Я знаю, что этот вопрос задавался ранее, но ни один из ответов не подходит для моего случая. Поэтому я должен попросить о помощи. Я новичок в Джерси, и я должен сделать отдыхающий клиент, который подключается к службе и получает от нее токен. Код следующий:

 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)

1 Ответ

0 голосов
/ 25 апреля 2018

Вам необходимо использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...