के साथ मैं डेटाबेस में ऑब्जेक्ट्स मैप करने के लिए हाइबरनेट का उपयोग कर रहा हूं। एक ग्राहक (किसी iOS एप्लिकेशन) मेरे JSON प्रारूप में विशेष वस्तुओं जो मैं अपने सच्चे प्रतिनिधित्व करने के लिए परिवर्तित निम्नलिखित उपयोगिता पद्धति का उपयोग करके भेजता हैस्ट्रिंग और बाइट [] के साथ JSON को कनवर्ट करना [] 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;
}
मुद्दा तथापि है, मेरी पोगो में मैं के रूप में एक बाइट [मान संग्रहीत कि ] के रूप में नीचे देखा जा सकता है (के रूप में यह है कि क्या डेटाबेस में संग्रहीत किया जाता है - एक ब्लॉब)
@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;
अब जाहिर है, रूपांतरण में विफल रहता है, क्योंकि यह एक बाइट [] और एक स्ट्रिंग के बीच परिवर्तित नहीं कर सकते।
एक बाइट सरणी के बजाय स्ट्रिंग को स्वीकार करने के लिए कन्स्ट्रक्टर को बदलने के लिए यहां सबसे अच्छा तरीका है और फिर बाइट सरणी मान सेट करते समय स्वयं रूपांतरण करें या ऐसा करने के लिए एक बेहतर तरीका है।
फेंक दिया गया त्रुटि निम्नानुसार है;
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: उम्मीद BEGIN_ARRAY लेकिन था STRING लाइन 1 कॉलम 96 पथ पर $ .optionalImage
धन्यवाद
संपादित असल में मैंने जिस दृष्टिकोण का सुझाव दिया वह भी काम नहीं करेगा जिस तरह से जीएसओएन वस्तु उत्पन्न करता है।
समस्या क्या है में बाइट [] वापस जाने के लिए? क्या आप जेसन प्रारूप का उपयोग करके बाइट सरणी को क्रमबद्ध/deserialize नहीं कर सकते? और क्या? – Andremoniy
मुझे जेसन के रूप में एक वस्तु प्राप्त हो रही है और इसे सीधे मेरे हाइबरनेट pojo में परिवर्तित कर रहा है। हाइबरनेट pojo बाइट सरणी प्रारूप में काम करता है। जीएसओएन लाइब्रेरी स्ट्रिंग को ऑब्जेक्ट में परिवर्तित करती है और बाइट को परिवर्तित करने में विफल होने लगती है [] – Biscuit128
असफल होने में त्रुटि क्या है? – Andremoniy