Saya bisa membuat serial List<Video>
di servlet saya di GAE, tapi saya tidak bisa menghilangkannya. Apa yang saya lakukan salah?
Ini adalah video kelas saya di GAE, yang berseri:
package legiontube;
import java.util.Date;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Video {
@PrimaryKey
private String id;
@Persistent
private String titulo;
@Persistent
private String descricao;
@Persistent
private Date date;
public Video(){};
public Video(String id, String titulo, String descricao, Date date) {
//super();
this.id = id;
this.titulo = titulo;
this.descricao = descricao;
this.date = date;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
Ini adalah kelas saya Video di aplikasi saya yang lain, di mana saya mencoba untuk menghilangkan:
package classes;
import java.util.Date;
public class Video {
private String id;
private String titulo;
private String descricao;
private Date date;
public Video(String id, String titulo, String descricao, Date date) {
//super();
this.id = id;
this.titulo = titulo;
this.descricao = descricao;
this.date = date;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
Jawaban:
Dengan Gson, Anda hanya perlu melakukan sesuatu seperti:
Anda mungkin juga perlu menyediakan konstruktor tanpa argumen pada
Video
kelas yang Anda deserialisasi.sumber
TypeToken<List<Video>>
... ini adalah trik yang memungkinkan tipe yang dihasilkan untuk mewakiliList<Video>
, karena subkelas tipe generik yang ditentukan sepenuhnya mempertahankan informasi tipe generik.TypeToken
masihprotected
dalam Gson 2.1, jadi hal di atas masih berfungsi.Cara lain adalah dengan menggunakan array sebagai tipe, misalnya:
Dengan cara ini Anda menghindari semua kerumitan dengan objek Type, dan jika Anda benar-benar membutuhkan daftar, Anda selalu dapat mengonversi array menjadi daftar, misalnya:
IMHO ini jauh lebih mudah dibaca.
Di Kotlin ini terlihat seperti ini:
Untuk mengubah array ini menjadi List, cukup gunakan
.toList()
metodesumber
Coba satu baris ini
Peringatan: daftar
videos
, yang dikembalikan olehArrays.asList
tidak dapat diubah - Anda tidak dapat memasukkan nilai baru.Referensi:
json
mungkin jenisJsonElement
,Reader
atauString
)sumber
Hati-hati menggunakan jawaban yang diberikan oleh @DevNG. Arrays.asList () mengembalikan implementasi internal ArrayList yang tidak mengimplementasikan beberapa metode berguna seperti add (), delete (), dll. Jika Anda memanggilnya, UnsupportedOperationException akan dilempar. Untuk mendapatkan instance ArrayList yang sebenarnya, Anda perlu menulis sesuatu seperti ini:
sumber