当我在控制台中打印时,我从 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"}
。如果您的类有两个名为 name
和 abbreviation
的字段(及其相应的 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/