error de deserialización Redis No se pudo leer JSON: No se puede construir instancia de `java.util.ArrayList $ SubList`

error de deserialización Redis

Redis almacenamiento en caché utilizado recientemente para hacer eso con el bien, un retorno a los métodos existentes de error al obtener el caché de Redis, la caché no puede obtener a partir del mensaje de error para ver, no puede hacerse por entregas. Aquí el registro acerca de la solución.

error de pasta directa:
Could not read JSON: Cannot construct instance of java.util.ArrayList$SubList(no Creators, like default construct, exist): no default no-arguments constructor found

Debido a que la secuencia del objeto es más compleja, varios objetos lista anidada, debido a ver las indicaciones de mensajes de error, las palabras "sin Creadores, como contrato por omisión" y así sucesivamente, que es la falta de un constructor sin argumentos, en el signo más Lombok @ NoArgsConstructor notas, o para volver a probar el mismo error, de hecho @NoArgsConstructor no tiene que ser añadido, ya que se ha añadido @AllArgsConstructor anotada.
Así que ver de cerca el mensaje de error, "lista secundaria", el culpable es este método. Nuestro código hace uso del método de caché sublis ArrayList objeto ha sido interceptado. Debido al uso de este método, lo que resulta objeto de caché no se puede deserializar.
Echemos un vistazo en la fuente sublista:
subLista
devuelve el método sublista una lista, la lista es una interfaz, heredado de la colección, y la colección también interfaz, un vistazo a las capas del pasado, están no implementa la interfaz Serializable, no se puede serializar / deserialización.

Lista
Vemos aquí, debemos entender que el método de objeto ArrayList.subList devuelve un tipo de lista secundaria de vista, este es un tipo de lista secundaria de clase ArrayList interno, y no lo hace serialización apoyo. El significado de la opinión de que el número de elementos en ella ha cambiado, pero la operación en la que los elementos de la lista original sigue siendo la operación no es nueva lista de acciones. Si cambia la lista original, se lanzará una excepción ConcurrentModificationException.

La causa raíz se encuentra, echar un vistazo a la forma de resolverlo.
La solución es bastante simple, para volver a crear una Lista de lograr la serialización, después de la lista de interceptación se almacena con el fin de lograr serializable.

// 原错误代码
bannerList = bannerList.subList(0, SLIDING_SIZE); // 修改后的正确代码 bannerList = new ArrayList<>(slidingBanner.subList(0, SLIDING_SIZE)); 

rápido

Al utilizar objetos de memoria caché de objetos en caché Redis, debido a las limitaciones herramienta de serialización JSON Jackson debe ser utilizado de Lombok @Data y @AllArgsConstructor modificado, si la persona puede surgir en la caché Redis, pero no puede deserializar problema. Recuerde que no debe objeto de caché será declarado como final!
Véase, la referencia puede https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization


Bienvenido al número de atención pública, subió a la manera de Java del combate ! ! !
carretera de combate de Java
Autor: cómo cambiar
los derechos de autor de todos, por favor indique la fuente, bienvenido a imprimir

Supongo que te gusta

Origin www.cnblogs.com/theonesmx/p/12498947.html
Recomendado
Clasificación