2015-10-15 2 views
0

Я пытаюсь использовать API почтового пула для получения данных об ошибках.API-интерфейс клиента java

public static ClientResponse GetBounce() { 

    Client client = new Client(); 
      client.addFilter(new HTTPBasicAuthFilter("api", 
          "key-XXXXXXXXXXXXXXXXXXXXX")); 
      WebResource webResource = 
        client.resource("https://api.mailgun.net/v3/XXXXXXXXXXXX.mailgun.org/" + 
            "bounces/[email protected]"); 
    return webResource.get(ClientResponse.class);} 

Он отлично работает вызов API в порядке, но я не в состоянии преобразовать ClientResponse в соответствующем типе в моем CAE EmailError. Фактический ответ от сервера {"address":"[email protected]","code":"550","error":"550 5.2.1 The email account that you tried to reach is disabled. lq5si9613879igb.63 - gsmtp","created_at":"Tue, 18 Aug 2015 12:23:35 UTC"}

Я создал POJO для отображения ответ

@JsonAutoDetect(getterVisibility = Visibility.NONE, fieldVisibility = Visibility.ANY) 
@JsonSerialize(include = Inclusion.NON_NULL) 
public class EmailError { 
    private String address; 
    private String error; 
    private String created_at; 
//geters... 
//setters.. 
} 

И попытаться сопоставить ClientResponse в тип EmailError.

ClientResponse clientResponse = getBounce(email); 
     EmailError error = response.getEntity(new GenericType<EmailError>() { 
     }); 

где clientResponse является объектом возврата методом GetBounce()

It throws an Exception com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class com.che.rt.businessservices.EmailError, and Java type class com.che.rt.businessservices.EmailError, and MIME media type application/json;charset=utf-8 was not found 

Любой глазок, где мне не хватает.

+0

Показывайте зависимости. –

+0

\t \t \t com.sun.jersey \t \t \t Джерси-клиент \t \t \t 1,19 \t \t

ответ

1

У вас, похоже, зависимость от Джексона (поскольку вы используете его аннотации), но этого недостаточно для Джерси. Джерси использует MessageBodyReader с для десериализации запросов/органов реагирования. Поэтому вам нужен тот, который может обрабатывать JSON. Джексон реализует устройство чтения и записи JAX-RS. Таким образом, вам нужна зависимость, а не только основные библиотеки Джексона.

Для Джерси вы можете добавить эту зависимость

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.19</version> 
</dependency> 

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

ClientConfig config = new DefaultClientConfig(); 
config.getProperties().put(JSONConfiguration.FEATURE_POJO_MAPPING, true); 
config.getSingletons().add(new JacksonJsonProvider()); 
Client client = Client.create(config); 

Обратите внимание на то, что вышесказанное использует Jackson 1.9.2. Если вы хотите использовать более новую 2.x Джексона, то вместо указанной выше зависимости, используйте это один

<dependency> 
    <groupId>com.fasterxml.jackson.jaxrs</groupId> 
    <artifactId>jackson-jaxrs-json-provider</artifactId> 
    <!-- or whatever [2.2,) version you want to use --> 
    <version>2.5.0</version> 
</dependency> 

Тогда конфигурация также должна отличаться

ClientConfig config = new DefaultClientConfig(); 
config.getSingletons().add(new JacksonJsonProvider()); 
Client client = Client.create(config); 
+0

же проблема com.sun.jersey.api.client.ClientResponse GetEntity СУРОВОЙ : Читатель тела сообщения для класса Java com.cheasyy.cofinding.businessservices.EmailError и класс типа Java com.che.rt.businessservice s.EmailError и приложение типа мультимедиа MIME/json; charset = utf-8 не найдено 15 октября 2015 г. 3:07:40 PM com.sun.jersey.api.client.ClientResponse getEntity SEVERE: Зарегистрированное тело сообщения считыватели, совместимые с типом MIME-носителей: application/json; charset = utf-8 -> com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider $ App –

+0

Прекрасно работает для меня.И почему вы используете «GenericType»? Нет ничего общего в 'EmailError' –

+0

Да, это не требуется. Я просто пытался это сделать. Его рабочий идеальный webResource.get (ClientResponse.class);} но не может преобразовать в EmailError –

Смежные вопросы