Sto utilizzando la modalità di sospensione per mappare gli oggetti nel database. Un client (un app iOS) mi manda particolari oggetti in formato JSON che ho convertire in loro vera rappresentazione utilizzando il seguente metodo di utilitàConversione di JSON tra stringa e byte [] con GSON
/**
* Convert any json string to a relevant object type
* @param jsonString the string to convert
* @param classType the class to convert it too
* @return the Object created
*/
public static <T> T getObjectFromJSONString(String jsonString, Class<T> classType) {
if(stringEmptyOrNull(jsonString) || classType == null){
throw new IllegalArgumentException("Cannot convert null or empty json to object");
}
try(Reader reader = new StringReader(jsonString)){
Gson gson = new GsonBuilder().create();
return gson.fromJson(reader, classType);
} catch (IOException e) {
Logger.error("Unable to close the reader when getting object as string", e);
}
return null;
}
La questione però è, che nel mio pogo devo conservare il valore come un byte [ ] come si può vedere qui di seguito (in quanto questo è ciò che è memorizzato nel database - un blob)
@Entity
@Table(name = "PersonalCard")
public class PersonalCard implements Card{
@Id @GeneratedValue
@Column(name = "id")
private int id;
@OneToOne
@JoinColumn(name="userid")
private int userid;
@Column(name = "homephonenumber")
protected String homeContactNumber;
@Column(name = "mobilephonenumber")
protected String mobileContactNumber;
@Column(name = "photo")
private byte[] optionalImage;
@Column(name = "address")
private String address;
Ora, naturalmente, la conversione non riesce, perché non in grado di convertire tra un byte [] e una stringa.
È l'approccio migliore qui per modificare il costruttore in modo che accetti una stringa anziché una matrice di byte e quindi esegua la conversione mentre si imposta il valore dell'array di byte o esiste un approccio migliore per farlo.
L'errore generato è il seguente;
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: BEGIN_ARRAY previsto, ma era STRING alla linea 1 della colonna 96 percorso $ .optionalImage
Grazie
Modifica In effetti, anche l'approccio che ho suggerito non funzionerà a causa del modo in cui GSON genera l'oggetto.
Qual è il problema? Non puoi serializzare/deserializzare l'array di byte usando il formato json? O cosa? – Andremoniy
Sto ricevendo un oggetto come json e lo converto direttamente nel mio pojo di sospensione. il pojo ibernato funziona in formato array di byte. la libreria GSON converte la stringa in oggetto e sembra che non riesca a convertire il byte [] – Biscuit128
Qual è l'errore in caso di errore? – Andremoniy