NutzCN Logo
问答 保存mogodb时报错Can't find a codec for class java.math.BigDecimal
发布于 93天前 作者 wx_87hijf2re2akv9hr9ocn 393 次浏览 复制 上一个帖子 下一个帖子
标签:

大佬,插入总是报错啊,什么原因啊
public String saveOrUpdateDoc(String docId, Object docContent, String collectionName){

    // 根据 collection 名称获取集合对象
    ZMoCo moco = zMoDB.c(collectionName);

    // save 方法会判断是否已存在此文档,存在则更新,不存在则插入
    WriteResult result = moco.save(ZMo.me().toDoc(docContent));
    return result.getUpsertedId().toString();
}

```

16 回复

用到了BigDecimal?

。。。 你得换一下了

换啥啊?换字段类型?

@wendal 这个方法就可以执行成功,这里用到的市insert 上面那个用的市save 请问两者有什么区别?

 public String insert(SaveNewApplyDTO...saveNewApplyDTO) {
        ZMoDoc[] docs = ZMo.me().toDocArray(saveNewApplyDTO);
        WriteResult result = zMoCoNewApply.insert(docs);
        String monodbId = docs[0].get("_id").toString();
        return monodbId;
    }

报个issue吧,然后把pojo类,相关代码通通贴上,看上去像个bug

这个是pojo类,只是想把

public class OrganAllowanceDTO {

    private ApplyInfoDTO applyInfoDTO; // 通用申请信息

    private JSONObject docObject; // 业务表单数据
}
    /**
     * 根据docId来对一篇文档进行添加或者更新
     * @param docId 文档ID
     * @param docContent 文档内容,可以是一段 json 文本,也可以是一个对象
     * @param
     * @return
     */
    public String saveOrUpdateDoc(String docId, Object docContent, String collectionName){

        // 根据 collection 名称获取集合对象
        ZMoCo moco = zMoDB.c(collectionName);

        // save 方法会判断是否已存在此文档,存在则更新,不存在则插入
        //todo: 当对象中有double类型的数据时会报Can't find a codec for class java.math.BigDecimal.在nutz社区大佬给的意见是换个类型,不用double
        WriteResult result = moco.save(ZMo.me().toDoc(docContent));
        return result.getUpsertedId().toString();
    }

没有体现出BigDecimal啊?

@wendal 大佬
private ApplyInfoDTO applyInfoDTO; // 通用申请信息这个DO中有 double类型的字段
private double constructionArea ;//'面积:总建筑面积';

wendal wendal   1楼•2天前
用到了BigDecimal?

wx_87hijf2re2akv9hr9ocn wx_87hijf2re2akv9hr9ocn 打赏 2楼•2天前
有的

你说用到BigDecimal的啊...

没有用到BigDecimal,没有BigDecimal类型的字段,但是报org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class java.math.BigDecimal.

是不是docObject里面有

miniui控件的原因应该,class="mini-spinner"用的这个控件,我打了断点后台传入的docObject中确实是BigDecimal类型

@wendal 大佬,之前是转成jsonoject时候用的 com.alibaba.fastjson这个包,这个包会自动把double转成BigDecimal,我换成了net.sf.json.JSONObject,然后save的时候就报
java.lang.IllegalArgumentException: invalid hexadecimal representation of an ObjectId: []

用nutz的Json.fromJson试试?

已经解决了,谢谢大佬,DTO中写了一个_id;字段,把这个字段去了就好了

添加回复
请先登陆
回到顶部