我有一个简单的对象,我正在尝试读/写到 couchbase(使用弹簧数据)。这是对象:
@Document
public class CacheObject {
@Id
private String id;
private byte[] data;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
}
我尝试使用 Couchbase 模板读/写它:
@Test
public void test2() throws Exception {
CacheObject o = new CacheObject();
o.setId("test1");
o.setData("test123".getBytes());
CouchbaseTemplate t = c.couchbaseTemplate();
t.save(o);
CacheObject o2 = t.findById("test1", CacheObject.class);
System.out.println("COOL " + new String(o2.getData()));
}
该模板来自扩展 AbstractCouchbaseConfiguration 的配置。
写入工作正常,我在 couchbase 中看到了 base64 编码值。读取抛出异常:
org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type byte for value 'd293'; nested exception is java.lang.NumberFormatException: For input string: "d293"
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:189)
at org.springframework.core.convert.support.StringToArrayConverter.convert(StringToArrayConverter.java:63)
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:35)
...
我可以通过使用自定义阅读器来解决这个问题(这是在我扩展 AbstractCouchbaseConfiguration 的配置中)。使用此代码,一切正常。
public CustomConversions customConversions() {
return new CustomConversions(Arrays.asList(StringToByteConverter.INSTANCE));
}
@ReadingConverter
public static enum StringToByteConverter implements Converter<String, byte[]> {
INSTANCE;
@Override
public byte[] convert(String source) {
return Base64.decodeBase64(source);
}
}
难道我做错了什么?
我已经尝试过 1.2.2 和 1.3.0.M1 并且都给出了相同的结果。
谢谢