клиент-джерси не может использовать GenericType? - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь создать фасад для получения списка с сервера, но ему не удается правильно преобразовать GenericType в список, и поэтому он не может выполнить цикл ForLoop, не выдав следующее исключение: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.testing.models.Account

Это связано с отсутствием достаточной информации о том, в какой класс десериализоваться, поэтому вместо этого он использует LinkedHashMap.Что я на самом деле хочу, так это List.

Обратите внимание, что getInbox не использует суперкласс и не использует generic, T, и это работает.

public abstract class BaseClient<T> {

final String BaseURI = "http://localhost:8082/r";
final Client client;

BaseClient() {
    ClientConfig clientConfig = new ClientConfig();
    clientConfig.property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_CLIENT, LoggingFeature.Verbosity.PAYLOAD_ANY);
    client = ClientBuilder.newClient(clientConfig);
}

@Deprecated // Does not map properly to List<T>
public List<T> getList(String target, String path, String format) {
    List<T> list = client.target(target)
            .path(path)
            .request(format)
            .get(new GenericType<List<T>>(){});
    return list;
}


public void close() {
        client.close();
}

}

public class MessagesClient extends BaseClient<Message> {

public static final String ClassURI = "/messages";

public MessagesClient() {
    super();
}

public void insert(Message message)  {
    super.post(message, BaseURI + ClassURI, "/create/", MediaType.APPLICATION_JSON);
}

public void delete(Message message) {
    super.post(message, BaseURI + ClassURI, "/delete/", MediaType.APPLICATION_JSON);
}

public List<Message> getInbox(String username) throws Exception {
    // I want to replace this with a call to the facade as seen in the examples above. 
    // (This is currently working)
    return client.target(BaseURI + ClassURI)
            .path("/inbox/" + username + "/")
            .request(MediaType.APPLICATION_JSON)
            .get(new GenericType<List<Message>>(){});
}

}

Вопрос: почему фасад не работает, если другой не использует дженерики?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...