【发布时间】:2014-10-20 18:03:04
【问题描述】:
我正在使用休眠将对象映射到数据库。客户端(iOS 应用程序)以 JSON 格式向我发送特定对象,我使用以下实用方法将其转换为它们的真实表示:
/**
* 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;
}
但问题是,在我的 pogo 中,我将值存储为 byte[],如下所示(因为这是存储在数据库中的内容 - 一个 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;
当然,转换失败了,因为它无法在 byte[] 和 String 之间进行转换。
这里最好的方法是改变构造函数以接受字符串而不是字节数组,然后在设置字节数组值的同时自己进行转换,还是有更好的方法来做到这一点。
抛出的错误如下;
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期为 BEGIN_ARRAY,但在第 1 行第 96 列路径为 STRING $.optionalImage
谢谢。
编辑事实上,由于 GSON 生成对象的方式,即使我建议的方法也行不通。
【问题讨论】:
-
有什么问题?您不能使用 json 格式序列化/反序列化字节数组吗?还是什么?
-
我正在接收一个 json 对象并将其直接转换为我的休眠 pojo。 hibernate pojo 以字节数组格式工作。 GSON 库将字符串转换为对象,似乎无法转换字节 []
-
失败的错误是什么?
-
已添加到 OP
-
也许这可以帮助你link
标签: java arrays json hibernate gson