gpt4 book ai didi

java - 使用 GSON 在字符串和 byte[] 之间转换 JSON

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:06:10 25 4
gpt4 key购买 nike

我正在使用 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 之间转换。

这里最好的方法是更改​​构造函数以接受字符串而不是字节数组,然后在设置字节数组值的同时自己进行转换,还是有更好的方法来执行此操作。

抛出的错误如下;

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:Expected BEGIN_ARRAY but was STRING at line 1 column 96 path$.optionalImage

谢谢。

编辑 事实上,由于 GSON 生成对象的方式,即使我建议的方法也行不通。

最佳答案

您可以使用这个 adapter以 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 .

关于java - 使用 GSON 在字符串和 byte[] 之间转换 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25522309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com