2016-03-18 1 views
0

J'utilise Spring Caching cadre avec redis. Voici le Cacheable que j'utilisePrintemps Cacheable patameters pour la clé

@Cacheable(value = "oauth2token", key="#value + #type") 
public OAuth2Token findOneByValueAndType(String value, String type); 

J'essayais juste de créer une clé que je connais. Cela donne une erreur

14:20:21,199 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/veip-web].[Resteasy]] (http-/0.0.0.0:8080-63) JBWEB000236: Servlet.service() for servlet Resteasy threw exception: org.springframework.expression.spel.SpelEvaluationException: EL1030E:(pos 0): The operator 'ADD' is not supported between objects of type 'null' and 'null' 

Parce que lorsque je ne spécifie pas de clé comme fllows.

@Cacheable(value = "oauth2token") 
public OAuth2Token findOneByValueAndType(String value, String type); 

Je peux voir une clé folle générée. J'ai besoin de connaître la clé parce que plus tard j'ai besoin de CachePut et mettre à jour le même article.

J'ai également essayé de suivre ce qui suit.

@Cacheable(value = "oauth2token", key="#type.contact(#value)") 
public OAuth2Token findOneByValueAndType(String value, String type); 

Spring se plaint que #type est nul ce moment-là.

Qu'est-ce qui ne va pas ici?

+0

Ce qui ne va pas, c'est que vous passez 'null'. – zeroflagL

Répondre

2

Vous n'avez probablement pas les informations d'exécution de chaque nom de paramètre (#value n'est pas connue). Un plus sûr serait d'utiliser l'alias #p ou #a qui fonctionnera toujours . key="#p0 + #p1" devrait faire l'affaire.

Cela dit, je ne ferais pas cela. Si vous réutilisez la clé dans une autre méthode annotée, je voudrais implement KeyGenerator en tant que bean et transmettre la référence de ce bean dans les méthodes qui doivent fonctionner sur ces deux valeurs. De cette façon, vous pouvez partager (et tester) ce code et éviter la duplication.

+0

Oui c'était le problème. Je l'ai trouvé plus tôt, ne pouvait pas mettre à jour la question. BTW J'ai pu utiliser les noms de paramètres dans les classes de service habituelles. C'était une interface de dépôt mongo où j'ai fait face à ce problème. Je pense que ce problème de nom de paramètre non disponible a une connexion avec cela. –