我正在使用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[]和一个字符串之间进行转换。
这里最好的方法是更改构造函数以接受字符串而不是字节数组,然后在设置字节数组值的同时自己进行转换,或者有没有更好的方法这样做。
抛出的错误如下所示;
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。
String转换到Byte数组时,每个byte(byte类型其实就是uint8)保存字符串对应字节的数值。 注意Go的字符串是UTF-8编码的,每个字符长度是不确定的,一些字符可能是1、2、3或者4个字节结尾。 示例1: package main import "fmt" func main() { s1 := "abcd" b1 := []byte(s1) fmt.Pri
本文向大家介绍详谈C# 图片与byte[]之间以及byte[]与string之间的转换,包括了详谈C# 图片与byte[]之间以及byte[]与string之间的转换的使用技巧和注意事项,需要的朋友参考一下 实例如下: 以上这篇详谈C# 图片与byte[]之间以及byte[]与string之间的转换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 我正在使用hibernate将对象映射到数据库。客户端(iOS应用程序)向我发送JSON格式的特定对象,我使用以下实用程序方法将其转换为真实的表示形式 但是问题是,在我的pogo中,我将值存储为byte [],如下所示(因为这是存储在数据库中的内容-blob) 当然,现在转换失败了,因为它无法在byte []和String之间进行转换。 这是更改构造函数以接受String而不是字节数组
问题内容: 我正在使用休眠将对象映射到数据库。客户端(iOS应用程序)向我发送了JSON格式的特定对象,我使用以下实用程序方法将其转换为真实的表示形式 但是问题是,在我的pogo中,我将值存储为byte [],如下所示(因为这是存储在数据库中的内容-blob) 当然,现在转换失败了,因为它无法在byte []和String之间进行转换。 这是更改构造函数以接受String而不是字节数组,然后在设置
本文向大家介绍C#实现Stream与byte[]之间的转换实例教程,包括了C#实现Stream与byte[]之间的转换实例教程的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式详细介绍了C#实现Stream与byte[]之间的转换的方法,分享给大家供大家参考之用。具体方法如下: 一、二进制转换成图片 二、C#中byte[]与string的转换代码 1. 2. 三、C# Stream 和 by
问题内容: 之间有什么区别 和 问题答案: 仅当对象 实际上是 字符串时,才强制转换为字符串: 当对象是其他对象时,它将不起作用: 但是,您将尝试将传递给它的任何内容转换为。它使用该对象的来处理原语()和对象(): 请特别注意最后一个示例:传递给将返回字符串。