在Spring数据库中使用@JsonSerialize和@JSONDesiralize

在Spring数据库中使用@JsonSerialize和@JSONDesiralize,spring,spring-data-jpa,spring-data,spring-data-couchbase,Spring,Spring Data Jpa,Spring Data,Spring Data Couchbase,该要求在couchbase实体类中,I应具有BigDecimal字段,以便在持久化实体之前进行的所有计算具有更高的精度,但BigDecimal不会作为单个值持久化在couchbase中,其持久化为 "num": { "scale": 4, "intCompact": 232564, "precision": 6 } 其中,num是BigDecimal字段的名称,所以我想要将BigDeci

该要求在couchbase实体类中,I应具有BigDecimal字段,以便在持久化实体之前进行的所有计算具有更高的精度,但BigDecimal不会作为单个值持久化在couchbase中,其持久化为

"num": {
    "scale": 4,
    "intCompact": 232564,
    "precision": 6
  }
其中,
num
是BigDecimal字段的名称,所以我想要将BigDecimal值序列化为double,同时将实体持久化为json,反之亦然,在从couchbase获取实体时,我使用自定义序列化器和Desiralizer,但它们根本不被调用,下面是代码

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;
导入org.springframework.data.repository.crudepository;
导入org.springframework.stereotype.Repository;
@存储库
公共接口LocalEntityReporto扩展了Crudepository{
}
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
导入org.springframework.boot.jackson.JsonComponent;
导入java.io.IOException;
导入java.math.BigDecimal;
@JsonComponent
公共类BDtoDoubleSerializer扩展了StdSerializer{
公共BDtoDoubleSerializer(){
这个(空);
}
公共BDtoDoubleSerializer(类t){
超级(t);
}
@凌驾
public void serialize(BigDecimal value,com.fasterxml.jackson.core.JsonGenerator gen,com.fasterxml.jackson.databind.SerializerProvider提供程序)引发IOException{
System.out.println(“$$$$$$$$$$$$$$”;
gen.writeString(value.toPlainString());
}
}
导入com.fasterxml.jackson.databind.desr.std.StdDeserializer;
导入org.springframework.boot.jackson.JsonComponent;
导入java.io.IOException;
导入java.math.BigDecimal;
@JsonComponent
公共类DoubleToBDESerializer扩展了STDESerializer{
公共DoubleTobdesirializer(){
这个(空);
}
@凌驾
public BigDecimal反序列化(com.fasterxml.jackson.core.JsonParser p,com.fasterxml.jackson.databind.DeserializationContext ctxt)抛出IOException,com.fasterxml.jackson.core.JsonProcessingException{
系统.out.println(“############################”;
返回新的BigDecimal(p.getValueAsString());
}
公用DoubleTobdesirializer(vc类){
超级(vc);
}
}
import com.couchbase.example.entity.LocalEntity;
导入com.couchbase.example.repo.LocalEntityRepo;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Service;
导入java.math.BigDecimal;
导入java.util.List;
导入java.util.UUID;
@服务
公共类LocalEntityService{
@自动连线
本地实体回购;
public void saveLocalEntity()
{
LocalEntity le=新的LocalEntity();
le.setId(UUID.randomuid().toString());
le.setNum(BigDecimal.valueOf(23.2564));
回购保存(le);
}
公共Iterable getAll()
{
返回回购findAll();
}
}
很长一段时间以来,我一直心烦意乱:),非常感谢您的帮助

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();
    }
}