为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻过高山走不出你 2023-05-10 16:56:41
当我在控制台中打印时,我从 API 调用中获取数据时遇到了一些问题。我得到{id: 0000, label: TEST}作为我的结果。我需要做的是将要label显示在我的下拉列表中的值填充为用户可以从中进行选择的值。下面有我的代码的方法吗?谢谢您的帮助。这是我的代码:使用泽西图书馆:  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>>() {});}@Overridepublic String toString() {    return new StringBuilder().append("[value=").append(value).append(", label=").append(label).append("]")            .toString();}
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

正如我在评论中提到的,如果您使用一个库或框架来为您完成繁重的工作,这将非常容易。这是一个使用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":"Alberta","abbreviation":"AB"}。Jersey 提供的 JSON 反序列化器可以将此 JSON 对象转换(反序列化)为 Java 对象,如果您有一个类,该类具有两个名为nameand abbreviation(及其相应的 getter 和 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();

        }

    }

}

泽西依赖项(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'


查看完整回答
反对 回复 2023-05-10
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信