Java SpEL EL1043E:意外的标记。预计 'rparen())' 但实际 'comma(,)'
Java SpEL EL1043E: Unexpected token. Expected 'rparen())' but was 'comma(,)'
我尝试学习 SpEL,但我的一个脚本不起作用。
我的脚本是:
changePages(#{T(StoryContent).pages}, (x, y) -> x.replaceAll(y, x.substring(0, 1) + '...' + x.substring(x.length() - 1, x.length())))
Java代码:
public void validate(Story story, List<StoryRule> rules) throws NoSuchMethodException, SecurityException {
StoryContent storyContent = storyContentRepository.findOne(story.getContentId());
story.setStatus(SchedulerStatus.VALIDATION);
storyRepository.save(story);
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext inventorContext = new StandardEvaluationContext(storyContent);
inventorContext.registerFunction("changePages", ValidationByRuleServiceImpl.class
.getDeclaredMethod("changePages", new Class[] { List.class, BiFunction.class }));
try {
rules.stream().map(StoryRule::getScript)
.forEach(script -> parser.parseExpression(script).getValue(inventorContext));
if (!storyContent.getTitle().equals(story.getName()))
story.setName(storyContent.getTitle());
story.setStatus(SchedulerStatus.PUBLISHED);
storyContentRepository.save(storyContent);
} catch (Exception e) {
LOG.error(e.getMessage());
story.setStatus(SchedulerStatus.ERROR);
} finally {
storyRepository.save(story);
}
}
private void changePages(List<String> pages, BiFunction<String, String, String> function) {
pages.forEach(System.out::println);
}
错误是:
Expression [changePages(T(StoryContent).pages, (x, y) -> x.replaceAll(y, x.substring(0, 1) + '...' + x.substring(x.length() - 1, x.length())))] @37: EL1043E: Unexpected token. Expected 'rparen())' but was 'comma(,)'
我从数据库中获取了 SpEL 脚本列表。
我不知道我的脚本或我的 java 代码出了什么问题?
SpEL 不是 Java,它是一种不同的语言;首字母缩略词代表 Spring 表达式 语言 .
它不理解 Java8 个 lambda,所以无法解析 (x, y) -> ...
。
但是,您可以将 lambda 注册为 SpEL 函数,请参阅 。
我尝试学习 SpEL,但我的一个脚本不起作用。 我的脚本是:
changePages(#{T(StoryContent).pages}, (x, y) -> x.replaceAll(y, x.substring(0, 1) + '...' + x.substring(x.length() - 1, x.length())))
Java代码:
public void validate(Story story, List<StoryRule> rules) throws NoSuchMethodException, SecurityException {
StoryContent storyContent = storyContentRepository.findOne(story.getContentId());
story.setStatus(SchedulerStatus.VALIDATION);
storyRepository.save(story);
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext inventorContext = new StandardEvaluationContext(storyContent);
inventorContext.registerFunction("changePages", ValidationByRuleServiceImpl.class
.getDeclaredMethod("changePages", new Class[] { List.class, BiFunction.class }));
try {
rules.stream().map(StoryRule::getScript)
.forEach(script -> parser.parseExpression(script).getValue(inventorContext));
if (!storyContent.getTitle().equals(story.getName()))
story.setName(storyContent.getTitle());
story.setStatus(SchedulerStatus.PUBLISHED);
storyContentRepository.save(storyContent);
} catch (Exception e) {
LOG.error(e.getMessage());
story.setStatus(SchedulerStatus.ERROR);
} finally {
storyRepository.save(story);
}
}
private void changePages(List<String> pages, BiFunction<String, String, String> function) {
pages.forEach(System.out::println);
}
错误是:
Expression [changePages(T(StoryContent).pages, (x, y) -> x.replaceAll(y, x.substring(0, 1) + '...' + x.substring(x.length() - 1, x.length())))] @37: EL1043E: Unexpected token. Expected 'rparen())' but was 'comma(,)'
我从数据库中获取了 SpEL 脚本列表。
我不知道我的脚本或我的 java 代码出了什么问题?
SpEL 不是 Java,它是一种不同的语言;首字母缩略词代表 Spring 表达式 语言 .
它不理解 Java8 个 lambda,所以无法解析 (x, y) -> ...
。
但是,您可以将 lambda 注册为 SpEL 函数,请参阅