@parkito

Как в restful приложении получить объект?

Здравствуйте. Помогите, пожалуйста, решить проблему. Пишу resful приложение. Из главного приложения возвращаю список объектов

List<User> users = new ArrayList<>();
            Tariff tariff = tariffService.getTariffByTitle(contractTitle);

            for (Contract contract : contractService.getAll()) {
                if (contract.getTariff().equals(tariff)) {
                    contract.getUser().setPassword("");
                    users.add(contract.getUser());
                }
            }
        return users;


Теперь, в rest принимаю

String output = null;
        String URLstring = "http://localhost:8080/getRestInfo?contract=base";
        URL url = new URL(URLstring);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Authorization", "Basic " +
                new String(new Base64().encodeBase64("b@b.ru:12345".getBytes())));
        if (conn.getResponseCode() != 200) {
            System.out.println("Failed : HTTP error code : "
                    + conn.getResponseCode());
            System.exit(1);
        }
        BufferedReader br = new BufferedReader(new InputStreamReader(
                (conn.getInputStream())));

        output = br.readLine();
        conn.disconnect();
        List<User> users = (List<User>) br;
        System.out.println(output);

Но получаю эксепшен о том, что поток байт нельзя прикастить к списку.

Как правильно нужно принимать объекты в restful-приложении?
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
@sirs
Попробуйте сделать на спринговом RestTemplate как тут описано. Пример как получить List<User> usersтут

P. S.
String output = null;
        String URLstring = "http://localhost:8080/getRestInfo?contract=base";
        URL url = new URL(URLstring);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Authorization", "Basic " +
                new String(new Base64().encodeBase64("b@b.ru:12345".getBytes())));
        if (conn.getResponseCode() != 200) {
            System.out.println("Failed : HTTP error code : "
                    + conn.getResponseCode());
            System.exit(1);
        }
        BufferedReader br = new BufferedReader(new InputStreamReader(
                (conn.getInputStream())));

        output = br.readLine();

        /**
         * Здесь в output переменной у Вас в output лежит json, чтобы преобразовать его в java бины нужен парсер (это называется десериализовать), наиболее популярные - Gson или Jackson
         */
        Gson gson = new Gson();
        Type userListType = new TypeToken<ArrayList<User>>() {}.getType();
        List<User> users = gson.fromJson(output, userListType);

        conn.disconnect();
        System.out.println(output);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы