问题描述
要求是在沙发床实体类中,我应该有一个BigDecimal字段,以便在持久化实体之前进行的所有计算都可以具有更高的精度,但是BigDecimal不能作为沙发床中的单个值持久化,
>"num": {
"scale": 4,"intCompact": 232564,"precision": 6
}
其中num
是BigDecimal字段的名称,所以我想要将BigDecimal值序列化为double,同时将实体保留为json,反之亦然,同时从沙发床中获取它,我正在使用自定义序列化程序和反序列化程序,但根本不会调用它们,下面是代码
import com.couchbase.example.jsonutil.BDtodoubleSerializer;
import com.couchbase.example.jsonutil.DoubletoBDDesirializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Accesstype;
import org.springframework.data.annotation.Id;
import org.springframework.data.couchbase.core.mapping.Document;
import org.springframework.data.couchbase.core.mapping.Field;
import java.math.BigDecimal;
@Document
@Getter
@Setter
public class LocalEntity
{
@Id
@Field
private String id;
@JsonSerialize(using = BDtodoubleSerializer.class)
@JsonDeserialize(using = DoubletoBDDesirializer.class)
@Accesstype(Accesstype.Type.PROPERTY)
private BigDecimal num;
}
import com.couchbase.example.entity.LocalEntity;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface LocalEntityRepo extends CrudRepository<LocalEntity,String> {
}
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import org.springframework.boot.jackson.JsonComponent;
import java.io.IOException;
import java.math.BigDecimal;
@JsonComponent
public class BDtodoubleSerializer extends StdSerializer<BigDecimal> {
public BDtodoubleSerializer() {
this(null);
}
public BDtodoubleSerializer(Class<BigDecimal> t) {
super(t);
}
@Override
public void serialize(BigDecimal value,com.fasterxml.jackson.core.JsonGenerator gen,com.fasterxml.jackson.databind.SerializerProvider provider) throws IOException {
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
gen.writeString(value.toPlainString());
}
}
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import org.springframework.boot.jackson.JsonComponent;
import java.io.IOException;
import java.math.BigDecimal;
@JsonComponent
public class DoubletoBDDesirializer extends StdDeserializer<BigDecimal> {
public DoubletoBDDesirializer() {
this(null);
}
@Override
public BigDecimal deserialize(com.fasterxml.jackson.core.JsonParser p,com.fasterxml.jackson.databind.DeserializationContext ctxt) throws IOException,com.fasterxml.jackson.core.JsonProcessingException {
System.out.println("###########################");
return new BigDecimal(p.getValueAsstring());
}
public DoubletoBDDesirializer(Class<?> vc) {
super(vc);
}
}
import com.couchbase.example.entity.LocalEntity;
import com.couchbase.example.repo.LocalEntityRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
@Service
public class LocalEntityService {
@Autowired
LocalEntityRepo repo;
public void saveLocalEntity()
{
LocalEntity le = new LocalEntity();
le.setId(UUID.randomUUID().toString());
le.setNum(BigDecimal.valueOf(23.2564));
repo.save(le);
}
public Iterable<LocalEntity> getAll()
{
return repo.findAll();
}
}
已经折磨我一段时间了:),非常感谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)