Supposons que j'utilise Spring et qu'un contrôleur renvoie un modèle contenant un champ data
qui est une instance de Jackson's ObjectNode
. Dans data
j'ai un StringBuilder
nommé log
.Langage d'expression JSP sur JSONNode de Jackson
Dans la JSP j'utilise
${data}
et je reçois cette sortie:
{"log":hello world}
Maintenant, si je veux accéder log
je pensais que je pouvais utiliser
${data["log"]}
mais tous Je reçois est
javax.el.PropertyNotFoundException: Property 'log' not found on type org.codehaus.jackson.node.ObjectNode
javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:214)
javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:191)
javax.el.BeanELResolver.property(BeanELResolver.java:300)
javax.el.BeanELResolver.getValue(BeanELResolver.java:81)
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
org.apache.el.parser.AstValue.getValue(AstValue.java:123)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:938)
:
${data.log}
montre la même chose.
Je sais que, selon l'EL data.log
cherche une méthode getLog()
sur data
, mais IIRC Maps<?,?>
soutenir ce genre d'accès à ses clés. Y a-t-il un moyen similaire de le faire fonctionner avec Jackson? Ou si cela ne fonctionne pas de cette façon, comment feriez-vous cela?
Je vois ce que vous voulez dire, mais il y a eu beaucoup de discussions et il a été décidé d'utiliser des classes Jackson dans ce scénario. L'un des aspects clés de ce problème était la manière dont nous récupérions les données à partir d'une source de données externe. Donc c'est quelque chose que je ne peux pas contourner. Entre les lignes, vous êtes plutôt d'accord avec ce que j'ai mis en ligne, donc je suppose que je devrais coder une sorte de wrapper pour cela. – sjngm