【问题标题】:Spring saving extra information in couchbaseSpring在沙发库中保存额外信息
【发布时间】:2016-10-21 14:12:11
【问题描述】:

我正在使用 Spring 在 Couchbase 中保存一个文档。对于某些字段,添加了额外信息。

POJO:

 @Document public class PlayerTxn implements Serializable {

    private static final long serialVersionUID = -2569497126561L;

    @Id     private String id;

    @Field  private Date txnDate;

    @Field  private BigDecimal wagerAmount;

    @Field  private BigDecimal pointsAwarded;

    @Field  private String segment;

要求结果:

{   "txnDate": 234234234324,   "wagerAmount": 234.33,   "pointsAwarded":
 23.2,   "segment": "xxx" }

最终结果:

{   "_class": "com.app.model.PlayerTxn",   "segment":
 "xxx",   "wagerAmount": {
     "intCompact": 24312,
     "scale": 2,
     "precision": 5,
     "stringCache": "243.12"   },   "pointsAwarded": {
     "intCompact": -9223372036854776000,
     "scale": 38,
     "precision": 0,
     "intVal": {
       "signum": 1,
       "bitCount": 0,
       "mag": [
         3800,
         -457875904,
         -1778440383,
         -1805069212,
         295579091
       ],
       "lowestSetBit": 0,
       "firstNonzeroIntNum": 0,
       "bitLength": 0
     }   },   "txnDate": 1466417747057 }

必须为 BigDecimal 编写一个 customConverter。

但“_class”仍在文档中添加。知道如何删除它吗?

【问题讨论】:

    标签: java spring-boot spring-data couchbase


    【解决方案1】:

    看起来您需要为 BigDecimal 值添加自定义转换器,例如:

    // extend or add a customized couchbase config like this
    public class CustomCouchbaseConfig extends AbstractCouchbaseConfiguration {
    
        @Override
        public CustomConversions customConversions() {
            return new CustomConversions(Arrays.asList(
                BigDecimalToString.INSTANCE,     
                StringToBigDecimalConverter.INSTANCE));
        }
    
        @WritingConverter
        public static enum BigDecimalToString implements Converter<BigDecimal, String> {
            INSTANCE;
    
            @Override
            public String convert(BigDecimal source) {
                // or a more appropriate implementation
                return source.toString() ;
            }
    
        }
    
    
        @ReadingConverter
        public static enum StringToBigDecimalConverter implements Converter<String, BigDecimal> {
            INSTANCE;
    
            @Override
            public BigDecimal convert(String source) {
                return new BigDecimal(source);
            }
    
        }
    
    }
    

    请务必确保这些转换器方法为空安全!

    有关更多信息,请参阅 Spring Data Couchbase 参考: http://docs.spring.io/spring-data/couchbase/docs/2.1.2.RELEASE/reference/html/#datatypes

    编辑: 关于_class 属性,请参阅this SO question 和Oliver Giercke 的回答,了解_class 背后的原因。 该问题针对 MongoDB,但也可以轻松翻译为 Couchbase。

    【讨论】:

    • 嗨克里斯蒂安,感谢您的回复。通过编写您提到的自定义转换器,我能够解决问题(管理员删除了我的评论,我不知道我应该编辑原始帖子),但我仍然在文档中得到 _class。
    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多