Tôi đang sử dụng chế độ ngủ đông để ánh xạ đối tượng vào cơ sở dữ liệu. Một khách hàng (ứng dụng iOS) gửi cho tôi đối tượng đặc biệt trong định dạng JSON mà tôi chuyển sang đại diện thực sự của họ bằng cách sử dụng phương pháp hữu ích sau đâyChuyển đổi JSON giữa chuỗi và byte [] với 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;
}
Vấn đề này tuy nhiên là, rằng trong pogo tôi lưu trữ các giá trị như một byte [ ] như có thể thấy bên dưới (vì đây là những gì được lưu trữ trong cơ sở dữ liệu - một 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;
Bây giờ tất nhiên, việc chuyển đổi không thành công vì nó không thể chuyển đổi giữa một byte [] và một string. Đây là cách tiếp cận tốt nhất ở đây để thay đổi constructor để chấp nhận một String thay vì mảng byte và sau đó tự chuyển đổi trong khi thiết lập giá trị mảng byte hoặc có cách tiếp cận tốt hơn để thực hiện điều này.
Lỗi được đưa ra như sau;
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: BEGIN_ARRAY dự kiến nhưng STRING tại dòng 1 cột 96 đường $ .optionalImage
Cảm ơn
Sửa Trong thực tế, ngay cả những cách tiếp cận tôi đề nghị sẽ không hoạt động do cách thức mà GSON tạo ra các đối tượng.
vấn đề là gì? Bạn không thể serialize/deserialize mảng byte bằng cách sử dụng định dạng json? Hay cái gì? – Andremoniy
Tôi đang nhận một đối tượng như là json và chuyển đổi trực tiếp nó vào trong hibernate pojo của tôi. hibernate pojo hoạt động ở định dạng mảng byte. thư viện GSON chuyển đổi chuỗi thành đối tượng và dường như không chuyển đổi được byte [] – Biscuit128
Lỗi trên đó là gì? – Andremoniy