当前位置: 首页 > 知识库问答 >
问题:

如何用spring数据将BigInteger转换为Objectid

苏乐
2023-03-14

我使用Java8和以下spring规范:

<spring.version>4.2.3.RELEASE</spring.version>
<spring.security.version>4.0.3.RELEASE</spring.security.version>
<spring.data.version>1.8.1.RELEASE</spring.data.version>
{
    "_id" : ObjectId("56c8f330d4c65e543ceac8de"),
    "companyId" : ObjectId("56c8f330d4c65e543ce8c8de"),
    "name" : "COMPANY S.R.L",
    more fields......
}

我已经创建了以下转换器:

 @Component
   public class PurchaseWriterConverter implements Converter<Purchase, DBObject>
   {
       @Override public DBObject convert(Purchase source)
        {
        DBObject dbo = new BasicDBObject();
        dbo.put("_id", source.getId());
        **ObjectId objCompany = new ObjectId(source.getCompany().toString(16));
        dbo.put("company", objCompany);**
        dbo.put("supplier", source.getSupplier());
        dbo.put("status", source.getStatus().toString());
        dbo.put("attendant", source.getAttendant());
        dbo.put("cashier", source.getCashier());

        List<Object> orders = new BasicDBList();

        for (OrderWrapper order : source.getOrders())
        {
            DBObject orderDBObject = new BasicDBObject();
            orderDBObject.put("description", order.getDescription());
            orderDBObject.put("basePrice", order.getBasePrice());
            orderDBObject.put("grossWeight", order.getGrossWeight());
            orderDBObject.put("netWeight", order.getNetWeight());
            orderDBObject.put("subtotal", order.getSubtotal());
            orderDBObject.put("totalWeight", order.getTotalWeight());
            orders.add(orderDBObject);
        }
        dbo.put("orders", orders);
        dbo.put("createDate", source.getCreateDate());
        dbo.put("updateDate", source.getUpdateDate());
        dbo.put("approvedBy", source.getApprovedBy());
        dbo.put("createDate", source.getCreateDate());
        dbo.put("updateDate", source.getUpdateDate());
        dbo.removeField("_class");

        return dbo;
    }
}

下列线路不起作用

dbo.put(“_id”,source.getid());**ObjectId objCompany=new ObjectId(Source.getCompany().ToString(16));

@Override
public ObjectId convert(BigInteger source) {
    return source == null ? null : new ObjectId(source.toString());
}
org.springframework.core.convert.ConversionFailedException: Failed to convert from type com.xxxxxxxxxxx.entity.Purchase to type com.mongodb.DBObject for value 'Purchase{company=1, orders=[com.xxxxxxx.equilibrium.wrapper.OrderWrapper@9cd3f65], supplier=26857458392532697059830357595, approvedBy='', status=TO_BE_APPROVED, attendant='User Admin', cashier=''}'; nested exception is java.lang.IllegalArgumentException: invalid ObjectId [1]

谁能给我一些关于如何将BigInteger转换为ObjectId的指导或者建议一些不同的东西。

共有1个答案

荆梓
2023-03-14

我刚刚在这里回答了一个类似的问题https://stackoverflow.com/a/46508892/4660481

有效的objectid可以由24个十六进制字符构造。在这种情况下,您的.toString(16)将返回“1”,它的长度不是24。在本例中,您需要的是“您可以通过填充0s来解决此问题:

String hexString24 = StringUtils.leftPad(source.getCompany().toString(16), 24, "0");
ObjectId objCompany = new ObjectId(hexString24);

 类似资料:
  • 问题内容: 我正在尝试从标准输入中读取一些非常大的数字,并将它们加在一起。 但是,要添加到BigInteger,我需要使用: 效果很好,但是由于唯一需要加上,所以我不能添加大于的最大值(9223372036854775807)的数字。 每当我尝试添加9223372036854775808或更多时,都会得到NumberFormatException(这是完全可以预期的)。 有类似的东西吗? 问题答案

  • 问题内容: 我想知道是否有任何方法可以将Integer类型的变量转换为BigInteger。我尝试类型转换Integer变量,但出现一个错误消息,指出不可转换的类型。 问题答案: 您想要的方法是BigInteger#valueOf(long val) 。 例如, 首先创建String是不必要的,也是不希望的。

  • 我正在尝试使用BigInteger类从二进制数打印十进制数。我正在使用BigInteger类的BigInteger(String val,int radix)构造函数将给定的二进制值转换为十进制值,但它打印的是构造函数中传递的精确二进制值。WAHT是错误吗?代码如下:

  • 这基本上与此相反:如何使用Spring JPA执行分页QueryDSL查询? 这是一个自定义查询,我不能使用任何findAll()方法。

  • 我有一个MySQL数据库,其中所有的表字段排序规则为 它已经存储了将近1000个记录,现在我想把所有这些数据转换成 以便我可以显示任何语言内容。我已经将字段排序规则修改为utf8_general_ci,但这并不能将所有旧记录转换为utf8_general_ci

  • 问题内容: 我想将BigInteger数转换为小的科学计数法,例如1.86e + 6,然后再次将该科学计数法转换为Java中的BigInteger数。请帮忙。 问题答案: 最简单的方法是使用a 解析或输出科学计数法字符串。 您可以执行以下操作: 并反向: 更新资料 如果需要更多用户定义的输出,则可以使用。不要忘记设置喜欢的东西,所以你不会得到,说逗号作为小数点分隔符(这是我第一次了,在德语区域)。