2016-01-25 1 views
1

si utilisation @Cacheable pour la valeur de retour 'ResponseEntity', j'ai eu une erreur de sérialisation.web de printemps ResponseEntity ne peut pas sérialiser

Caused by: org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [org.springframework.http.ResponseEntity] 

Démo:

@Controller 
@CacheConfig(cacheNames = "logs") 
public class LogController { 
    @Cacheable(key = "#id") 
    @RequestMapping(value = LogConstants.LOGS_ID_PATH, method = RequestMethod.GET) 
    public ResponseEntity<Log> findById(@PathVariable Long id) { 
    //.... 
    } 
} 

Répondre

1

clés pour le cache pour stocker vos objets doit être Serializable mais ResponseEntity n'est pas Serializable.

Vous avez deux solutions ici, soit mettre en œuvre Serializable pour vous opposez ou ajoutez une touche personnalisée pour l'annotation @Cacheable par exemple avec SPEL

@Cacheable(cacheName="responseCache", key="#response?.body") 

ou générateur de clé personnalisé à partir ehcache

CustomKeyGenerator implements CacheKeyGenerator<Serializable> 
+0

N'a pas travaillé pour mon. Ma solution était de créer un composant pour être l'homme du milieu. –