用GSON在字符串和字节[]之间转换JSON
我正在使用hibernate将对象映射到数据库。客户端(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之间进行转换。
这是更改构造函数以接受String而不是字节数组,然后在设置字节数组值的同时自己进行转换的最佳方法,还是有更好的方法做到这一点?
引发的错误如下:
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但位于第1行第96列的路径$
.optionalImage
谢谢
实际上,由于GSON生成对象的方式,即使我建议的方法也行不通。
回答:
您可以使用此适配器在base64中序列化和反序列化字节数组。这是内容。
public static final Gson customGson = new GsonBuilder().registerTypeHierarchyAdapter(byte[].class, new ByteArrayToBase64TypeAdapter()).create();
// Using Android's base64 libraries. This can be replaced with any base64 library.
private static class ByteArrayToBase64TypeAdapter implements JsonSerializer<byte[]>, JsonDeserializer<byte[]> {
public byte[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return Base64.decode(json.getAsString(), Base64.NO_WRAP);
}
public JsonElement serialize(byte[] src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(Base64.encodeToString(src, Base64.NO_WRAP));
}
}
归功于作者Ori
Peleg。
以上是 用GSON在字符串和字节[]之间转换JSON 的全部内容, 来源链接: utcz.com/qa/403743.html