1 回答

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
正如我在評(píng)論中提到的,如果您使用一個(gè)庫(kù)或框架來為您完成繁重的工作,這將非常容易。這是一個(gè)使用Jersey檢索列表的非常簡(jiǎn)單的示例。
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();
? ? ? ? }
? ? }
}
更新
我只是稍微修改了代碼,以便它返回一個(gè)項(xiàng)目列表。
警告:這不是生產(chǎn)就緒代碼。我沒有添加任何異常處理或日志記錄,因此它保持簡(jiǎn)短并以清晰的方式傳達(dá)其目的。
您需要熟悉 JSON 序列化器/反序列化器,才能理解上面示例中的內(nèi)容。
解釋
如果您查看鏈接 (?https://api.myjson.com/bins/7xq2x?) 的響應(yīng),您會(huì)看到它返回一個(gè) JSON 數(shù)組,其中數(shù)組的每個(gè)元素是:?{"name":"Alberta","abbreviation":"AB"}
。Jersey 提供的 JSON 反序列化器可以將此 JSON 對(duì)象轉(zhuǎn)換(反序列化)為 Java 對(duì)象,如果您有一個(gè)類,該類具有兩個(gè)名為name
and?abbreviation
(及其相應(yīng)的 getter 和 setter)的字段。
這行代碼
response.readEntity(new?GenericType<List<Item>>()?{});
將開箱即用,因?yàn)槲覀優(yōu)?code>Item類提供了與上面 JSON 對(duì)象中的鍵一樣命名的字段:
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();
? ? ? ? }
? ? }
}
澤西依賴項(xiàng)(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'
添加回答
舉報(bào)