使用Spring SPEL解析JSON

时间:2018-09-21 15:01:01

标签: spring spring-integration jsonpath spring-el

有人可以告诉我为什么这不起作用:

@Test
public void should_parse_json() {
    Expression expression = new SpelExpressionParser().parseExpression("#jsonPath(get('JsonData'), '$.someData')");

    Map<String, Object> data = new HashMap<>();
    data.put("JsonData", "{\"someData\": 100}");

    StandardEvaluationContext context = new StandardEvaluationContext(data);
    context.addPropertyAccessor(new JsonPropertyAccessor());

    assertThat(expression.getValue(context, Object.class)).isEqualTo(100);
}

我收到错误消息“ org.springframework.expression.spel.SpelEvaluationException:EL1006E:函数'jsonPath'找不到”

我在类路径中有以下jar:

    <dependency>
        <groupId>com.jayway.jsonpath</groupId>
        <artifactId>json-path</artifactId>
    </dependency>

SPEL文档没有帮助我。

1 个答案:

答案 0 :(得分:2)

#jsonPath() SpEL函数是Spring Integration基础结构https://docs.spring.io/spring-integration/docs/current/reference/html/spel.html#spel-functions的一部分。

它不适用于纯Spring和仅SpEL。

但是我看到您使用JsonPropertyAccessor。这确实是Spring Integration的一部分,并且您肯定在类路径中有了它。

从这里开始,我认为您只是想将SpEL函数注册到StandardEvaluationContexthttps://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#expressions-ref-functions

context.registerFunction("jsonPath", BeanUtils.resolveSignature("evaluate", JsonPathUtils.class));