@Service
public class PokemonManager implements PokemonService {
private HttpResponse<String> getStringHttpResponseByUrl(final String url) {
HttpClient httpClient = HttpClient.newHttpClient()。
HttpRequest request = HttpRequest.newBuilder()
.GET().header("accept"/span>, "application/json"/span>)
.uri(URI.create(url)).build()。
HttpResponse<String> httpResponse = null;
try {
httpResponse = httpClient.send(request, HttpResponse.BodyHandlers.ofString())。
} catch (IOException | InterruptedException e) {
e.printStackTrace()。
}
return httpResponse;
}
private <T> T getObjectResponse(T t, String url) {
ObjectMapper objectMapper = new ObjectMapper()。
try {
t = objectMapper.readValue(getStringHttpResponseByUrl(url).body(), new TypeReference<> () {
});
} catch (JsonProcessingException e) {
e.printStackTrace()。
}
return t;
}
private List<Pokemon> getAllPokemonsAsList() {
final String POSTS_API_URL = "https://pokeapi.co/api/v2/pokemon?limit=10000";
PokeApiResponse pokeApiResponse = new PokeApiResponse()。
pokeApiResponse = getObjectResponse(pokeApiResponse, POSTS_API_URL)。
System.out.println(pokeApiResponse);
return pokeApiResponse.results。
}
@Override
public List<Pokemon> getAll {
return getAllPokemonsAsList()。
}
我有一個如上的代碼。如果我不在 "getObjectResponse "方法中使用泛型,代碼就能正常作業。然而,當我使用泛型時,"t "的型別變成了 "LinkedHashMap "而不是 "PokeApiResponse",代碼崩潰了。我怎樣才能解決這個問題呢?
uj5u.com熱心網友回復:
一般來說,你會使用它:
objectMapper.readValue("yourJSONHere", PokeApiResponse.class) 。
如果你想要一個Generic T的回應,也許這樣就可以了
private <T> T getGeneric(Class<T> clazz, String json) throwsIOException {
return new ObjectMapper().readValue(json, clazz)。
}
示例:
Pokemon charmander = getGeneric(Pokemon.class,"{
"
" "name": "charmander"
"
"}")。)
uj5u.com熱心網友回復:
你沒有傳遞足夠的資訊給ObjectMapper來決議JSON,這種方式。此外,沒有必要傳遞回應的實體,你可以使用類來代替。我還會將JSON決議邏輯提取到單獨的方法中:
public static <T> T jsonToModel(String document, Class< T> type) throws IOException {
return new ObjectMapper().readValue(document, type)。
}
private List<Pokemon> getAllPokemonsAsList() {
final String postsApiUrl = "https://pokeapi.co/api/v2/pokemon?limit=10000";
final HttpResponse<String> httpResponse = getStringHttpResponseByUrl(postApiUrl)。
final PokeApiResponse pokeApiResponse = jsonToModel(pokeApiResponse,PokeApiResponse.class)。
System.out.println(pokeApiResponse)。
return pokeApiResponse.results;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/318627.html
標籤:
上一篇:如何創建一個通用結構?
