BigDecimal log_max=new BigDecimal(21.11617279052734); BigDecimal log_min=new BigDecimal(21.01617279052734); BigDecimal lat_max=new BigDecimal(61.43435454343454); BigDecimal lat_min=new BigDecimal(61.03435454343454); String col_name="latitude"; String col_name2="longitude"; List<BasicDBObject> criteria=new ArrayList<BasicDBObject>(); BasicDBObject searchQuery1 =new BasicDBObject(col_name, new BasicDBObject("$gte", lat_min).append("$lte", lat_max)); criteria.add(searchQuery1); BasicDBObject searchQuery2=new BasicDBObject(col_name2, new BasicDBObject("$gte", log_min).append("$lte", log_max)); criteria.add(searchQuery2); DBCursor cursor = coll.find(query); while (cursor.hasNext()) { DBObject cursorObj = cursor.next(); LOGGER.info("Collection successf"); Object temp1 = cursorObj.get("longitude"); BigDecimal longitude = new BigDecimal(temp1.toString()); System.out.println("longitude ::::"+longitude); Object temp2 =cursorObj.get("latitude"); BigDecimal latitude = new BigDecimal(temp2.toString()); LOGGER.info("done getting "); } }Recibo java.lang.IllegalArgumentException: no se puede serializar la clase java.math.BigDecimal
¿Alguien sabe cuál será la alternativa de BigDecimal...?
Revisando algunos de los materiales disponibles en Internet, intentaré proporcionar una respuesta concisa a su pregunta.
En primer lugar, BigDecimal no es compatible de forma nativa con MongoDB, por lo que no puede usar BigDecimal directamente. Entonces, ¿cómo lidiar con eso?
Bueno, hay alternativas.
BigDecimal a String y guárdelo en la base de datos. Si está utilizando spring-data se solucionará. Pero el almacenamiento como String no funciona como se esperaba y puede generar resultados inesperados en las consultas de agregación.Double será suficiente, puede usar Double o si desea usar BigDecimal , puede escribir su convertidor personalizado en spring-data-mongodb , que convertirá su BigDecimal a Double cuando se almacene en la base de datos y Double a BigDecimal al leer de él. Puede consultar esta respuesta para ver un ejemplo.