Saya punya dua pertanyaan:
- Cara memetakan daftar objek JSON menggunakan Spring RestTemplate.
- Cara memetakan objek JSON bersarang.
Saya mencoba untuk mengkonsumsi https://bitpay.com/api/rates , dengan mengikuti tutorial dari http://spring.io/guides/gs/consuming-rest/ .
java
spring
resttemplate
Karudi
sumber
sumber
Jawaban:
Mungkin dengan cara ini ...
Kode pengontrol untuk
RequestMapping
ResponseEntity
adalah perpanjangan dariHttpEntity
yang menambahkanHttpStatus
kode status. Digunakan dalam metodeRestTemplate
juga@Controller
. DiRestTemplate
kelas ini dikembalikan olehgetForEntity()
danexchange()
.sumber
Pertama-tama tentukan objek yang menahan entitas yang akan kembali dalam array .. misalnya
Kemudian Anda dapat menggunakan layanan ini dan mendapatkan daftar yang sangat diketik melalui:
Solusi lain di atas juga akan berfungsi, tapi saya suka mendapatkan daftar yang sangat diketik kembali daripada Object [].
sumber
restTemplate.exchange
a marshallar memetakan semua nilai json ke nama kunci yang cocok sebagai properti di objek Rate. Semoga proses pemikiran saya benar.Bagi saya ini berhasil
Di mana Object adalah kelas yang Anda inginkan
sumber
Coupon[] coupons = restTemplate.getForObject( url, Coupon[].class)
[]
tetapi benar-benar kosong). Jadi hati-hati dan periksanull
(if (forNow != null)...
).Object.class
ditentukan dalam metodegetForObject()
.Setelah beberapa tes, ini adalah cara terbaik yang saya temukan :)
Yang kamu butuhkan di sana
sumber
Masalah besar saya di sini adalah untuk membangun struktur Objek yang diperlukan untuk mencocokkan RestTemplate ke Kelas yang kompatibel. Untungnya saya menemukan http://www.jsonschema2pojo.org/ (dapatkan respons JSON di browser dan menggunakannya sebagai masukan) dan saya tidak bisa merekomendasikan ini cukup!
sumber
saya benar-benar mengeluarkan sesuatu yang fungsional untuk salah satu proyek saya sebelum dan di sini adalah kode:
Saya harap ini akan membantu seseorang!
sumber
Jika Anda lebih suka Daftar Objek, salah satu cara untuk melakukannya adalah seperti ini:
Dan gunakan seperti ini:
Penjelasan untuk hal di atas dapat ditemukan di sini ( https://www.baeldung.com/spring-rest-template-list ) dan diparafrasekan di bawah ini.
"Ada beberapa hal yang terjadi dalam kode di atas. Pertama, kami menggunakan ResponseEntity sebagai tipe pengembalian kami, menggunakannya untuk membungkus daftar objek yang benar-benar kami inginkan. Kedua, kami memanggil RestTemplate.exchange () alih-alih getForObject () .
Ini adalah cara paling umum untuk menggunakan RestTemplate. Ini mengharuskan kami untuk menentukan metode HTTP, badan permintaan opsional, dan jenis respons. Dalam hal ini, kami menggunakan subkelas anonim dari ParameterizedTypeReference untuk tipe respons.
Bagian terakhir inilah yang memungkinkan kita untuk mengubah respons JSON menjadi daftar objek yang merupakan tipe yang sesuai. Saat kami membuat subkelas anonim dari ParameterizedTypeReference, ia menggunakan refleksi untuk menangkap informasi tentang tipe kelas yang ingin kami konversi responsnya.
Itu berpegang pada informasi ini menggunakan objek Type Java, dan kita tidak perlu lagi khawatir tentang penghapusan tipe. "
sumber
Pertimbangkan untuk melihat jawaban ini, khususnya jika Anda ingin menggunakan obat generik di
List
Spring RestTemplate dan tipe generik koleksi ParameterizedTypeReference seperti Daftar <T>sumber
Anda dapat membuat POJO untuk setiap entri seperti,
lalu gunakan ParameterizedTypeReference of List of BitPay yang dapat Anda gunakan sebagai:
sumber
Saya menemukan pekerjaan sekitar dari posting ini https://jira.spring.io/browse/SPR-8263 .
Berdasarkan posting ini Anda dapat mengembalikan daftar yang diketik seperti ini:
sumber
getForEntity
. Juga(Class<? extends ArrayList<User>>) ArrayList.class
memberikan kesalahan kompilasi "tipe yang tidak kompatibel".