SpEL这么香的功能都没有使用过,还敢说玩转Spring?

本文介绍了Spring Expression Language (SpEL),它是Spring框架的一部分,用于在运行时查询和操作对象图。SpEL支持丰富的表达式语法,包括访问属性、数组、列表、映射、方法调用等。它在数据解析模块中发挥重要作用,允许根据配置的表达式解析不同来源的数据。文章详细讲解了SpEL的基础用法和核心特性,如文字表达式、运算符、方法调用和集合操作。
摘要由CSDN通过智能技术生成

本文已被Github仓库收录 https://github.com/silently9527/JavaCore

前言

最近工作中接到一个需求,需要对接第三方公司的API接口,由于每个公司提供的数据格式都不一样以及后期可能会对接更多的公司,我们给出的技术方式是设计一个数据解析模块,把数据结构各异的解析成我们内部定义的通用数据对象,如果后期再新增第三方公司的接口,我们只需要在后台配置好数据的解析规则即可完成对接

我们调研过表达式语言OGNL、SpEL(表达式语言不止这两种),由于考虑到我们项目本身都是依赖于Spring的,所以选择了SpEL

SpEL介绍以及功能概述

SpEL是spring提供的强大的表达式语言,本身也是作为了Spring的基石模块,在Spring的很多模块中都是使用到;虽然SpEL是Spring的基石,但是完全脱离Spring独立使用。SpEL提供的主要功能:

  • 文字表达式

  • 布尔和关系运算符

  • 正则表达式

  • 类表达式

  • 访问 properties, arrays, lists, maps

  • 方法调用

  • 关系运算符

  • 参数

  • 调用构造函数

  • Bean引用

  • 构造Array

  • 内嵌lists、内嵌maps

  • 三元运算符

  • 变量

  • 用户定义的函数

  • 集合投影

  • 集合筛选

  • 模板表达式

SpEL表达语言初级体验

下面的代码使用SpEL API来解析文本字符串表达式 Hello World.

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello World'");
String message = (String) exp.getValue();

接口ExpressionParser负责解析表达式字符串,在表达式中表示字符串需要使用单引号

SpEL支持很多功能特性,如调用方法,访问属性,调用构造函数。

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello World'.concat('!')");
String message = (String) exp.getValue();

SpEL还支持使用标准的“.”符号,即嵌套属性prop1.prop2.prop3和属性值的设置

ExpressionParser parser = new SpelExpressionParser();

// invokes getBytes().length
Expression exp = parser.parseExpression("'Hello World'.bytes.length");
int length = (Integer) exp.getValue();

也可以使用public <T> T getValue(Class<T> desiredResultType)来获取返回指定类型的结果,不用强制类型转换,如果实际的结果不能转换成指定的类型就会抛出异常EvaluationException

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("new String('hello world').toUpperCase()");
String message = exp.getValue(String.class);

SpEL比较常见的用途是针对一个特定的对象实例(称为root object)提供被解析的表达式字符串. 这种方式也是我们项目中使用的方式,把不同渠道传入的json数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值