java - 在java中将数据加载到下拉列表中?

标签 java

当我在控制台中打印时,我从 API 调用获取数据时遇到了一些问题。我得到的结果是 {id: 0000, label: TEST}。我需要做的是填充 label 以在下拉列表中显示为用户可以选择的值。我下面的代码有办法吗?感谢您的帮助。

这是我的代码:

Using Jersey Library:

  public List<JobSearchItem> getjobSearchList() {

    Client restClient = ClientBuilder.newClient();
    Response response = restClient.target("https://api.myjson.com/bins/7xq2x").request(MediaType.APPLICATION_JSON).get();
    return response.readEntity(new GenericType<List<JobSearchItem>>() {});


}
@Override
public String toString() {
    return new StringBuilder().append("[value=").append(value).append(", label=").append(label).append("]")
            .toString();
}

最佳答案

正如我在评论中提到的,如果您使用一个为您完成繁重工作的库或框架,那么这将非常容易。这是一个使用 Jersey 检索列表的非常简单的示例。

import java.util.List;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

public class ListExtractor {
    public static void main(String[] args) {
        Client restClient = ClientBuilder.newClient();
        Response response = restClient.target("https://api.myjson.com/bins/7xq2x").request(MediaType.APPLICATION_JSON).get();
        List<Item> items = response.readEntity(new GenericType<List<Item>>() {});
        items.forEach(System.out::println);
    }

    static class Item {
        private String name;
        private String abbreviation;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getAbbreviation() {
            return abbreviation;
        }

        public void setAbbreviation(String abbreviation) {
            this.abbreviation = abbreviation;
        }

        @Override
        public String toString() {
            return new StringBuilder().append("[name=").append(name).append(", abbreviation=").append(abbreviation).append("]")
                    .toString();
        }
    }
}

<小时/> 更新

我只是稍微修改了代码,以便它返回一个项目列表。

警告:这不是生产就绪的代码。我没有添加任何异常处理或日志记录,因此它保持简短并以清晰的方式传达其目的。

您需要熟悉 JSON 序列化器/反序列化器,才能理解上面示例中发生的情况。

说明

如果查看链接 ( https://api.myjson.com/bins/7xq2x ) 的响应,您会发现它返回一个 JSON 数组,其中数组的每个元素是: {"name":"艾伯塔省","abbreviation":"AB"}。如果您的类有两个名为 nameabbreviation 的字段(及其相应的 getters),Jersey 提供的 JSON 反序列化器可以将此 JSON 对象转换(反序列化)为 Java 对象和 setter )。

这行代码

response.readEntity(new GenericType<List<Item>>() {});

将开箱即用,因为我们为 Item 类提供了与上面 JSON 对象中的键一样命名的字段:

class Item {
        private String name;
        private String abbreviation;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getAbbreviation() {
            return abbreviation;
        }

        public void setAbbreviation(String abbreviation) {
            this.abbreviation = abbreviation;
        }

        @Override
        public String toString() {
            return new StringBuilder().append("[name=").append(name).append(", abbreviation=").append(abbreviation).append("]")
                    .toString();
        }
    }

这是修改后的示例:

import java.util.List;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

public class ListExtractor {
    public static void main(String[] args) {
        List<Item> items = getItems();
        items.forEach(System.out::println);
    }

    static List<Item> getItems() {
        Client restClient = ClientBuilder.newClient();
        Response response = restClient.target("https://api.myjson.com/bins/7xq2x").request(MediaType.APPLICATION_JSON).get();
        return response.readEntity(new GenericType<List<Item>>() {});   
    }


    static class Item {
        private String name;
        private String abbreviation;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getAbbreviation() {
            return abbreviation;
        }

        public void setAbbreviation(String abbreviation) {
            this.abbreviation = abbreviation;
        }

        @Override
        public String toString() {
            return new StringBuilder().append("[name=").append(name).append(", abbreviation=").append(abbreviation).append("]")
                    .toString();
        }
    }
}

Jersey 依赖项(Gradle):

implementation 'org.glassfish.jersey.core:jersey-client:2.25.1'
implementation 'org.glassfish.jersey.media:jersey-media-json-jackson:2.25.1'
implementation 'org.glassfish.jersey.media:jersey-media-jaxb:2.25.1'

关于java - 在java中将数据加载到下拉列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57329886/

相关文章:

java - 为 facebook Graph Api 服务自动生成 java 类

java - 如何从数组列表中提取某些子字符串之间的不同子字符串?

java - 使用 Amazon Spot 实例(或其他方式)从 Java 代码发出多个 HTTP 请求

java - 在 Eclipse 中使用 windowbuilder 在哪里下载 Windows XP 的外观?

java - MySQL 查询 XML 输出

java - 'download' 功能应该封装在对象中还是其他地方?

java - Java 中的 XML 到 XML 的转换

java - 在较大的图像中查找已知的子图像

Java swing 组件在 netbeans 之外无法正确显示

java - 运行抽象构造函数,然后转换为子类