ektorp Javaクライアントを使用してオブジェクトをcouchdbに送信したいとします。しかし私はcoutdbにバイタル文字の値を正しく書き込むことができませんでした。私はStringにByteArrayの変換する場合bytearrayをcouchdbに書き込む方法は?
::次のように私のJavaオブジェクト
メタデータ値が "AgIGZm9vBmJhegA ="(BASE64)としてCouchDBの上に保存され、これがあることを意味します"foobaz"私のbytearray値はなぜ変わるのですか?
マイ例コード:
private CouchDbInstance dbInstance;
private CouchDbConnector db;
...
Map<String, Object> doc = new HashMap<>();
doc.put("_id", "foo.com:http/");
byte[] serilazeData = IOUtils.serialize(writer, fieldValue);
doc.put("metadata", serilazeData);
...
db.update(doc);
私の主なコードブロック
public void put(K key, T obj) {
final Map<String, Object> doc = new HashMap<>();
doc.put("_id", key.toString());
Schema schema = obj.getSchema();
List<Field> fields = schema.getFields();
for (int i = 0; i < fields.size(); i++) {
if (!obj.isDirty(i)) {
continue;
}
Field field = fields.get(i);
Schema.Type type = field.schema().getType();
Object fieldValue = obj.get(field.pos());
Schema fieldSchema = field.schema();
fieldValue = serializeFieldValue(fieldSchema, fieldValue);
doc.put(field.name(), fieldValue);
}
db.update(doc);
}
private Object serializeFieldValue(Schema fieldSchema, Object fieldValue){
...
byte[] data = null;
try {
SpecificDatumWriter writer = getDatumWriter(fieldSchema);
data = IOUtils.serialize(writer, fieldValue);
} catch (IOException e) {
LOG.error(e.getMessage(), e);
}
fieldValue = data;
...
return fieldValue;
}
いいえ、最初はデータベースに関するデータがありません。 "db.update()"は、dbにデータがない場合、新しいデータを新しい行として追加します。私はテストケースを実行します。 – cguzel