首页 > 其他分享 >Mybatis if判断中使用了Ognl关键字导致报错解决方法

Mybatis if判断中使用了Ognl关键字导致报错解决方法

时间:2024-05-09 11:14:59浏览次数:27  
标签:... shr 字符 getValue Mybatis 报错 context Ognl

mybatis xml中使用OGNL解析参数,如果直接使用了关键字则会导致解析失败。
常见的关键字有:

字段    mybatis关键字
bor      (字符|)的英文 
xor      字符^的英文
and      字符&&
band     字符&
ed       字符==
neg      字符!=
lt       字符<
gt       字符>
lte      字符<=
gte      字符>=
shl      字符<<
shr      字符>> 
ushr     字符>>> 

if判断中使用了Ognl关键字导致报错 报错日志

Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'shr ! = ''and  shr !=null'. Cause: org.apache.ibatis.ognl.ExpressionSyntaxException: Malformed OGNL expression: 'shr ! = ''and  shr !=null'[org.apache.ibatis.ognl.ParseException: Encountered " "shr"
Was expecting one of:
    <EOF> 
    "," ...
    "=" ...
    "?" ...
    "||" ...
    "or" ...
    "&&" ...
    "and" ...
    "shr" ...

解决方案


    public void testOngl() throws OgnlException {
        OgnlContext context = new OgnlContext();
        UserDto dto = new UserDto();
        dto.setId("TMS02000000000000000000041855112");
        dto.setShr("审核人1");
        context.setRoot(dto);

        // 报错写法
        System.out.println(Ognl.getValue("shr != null and shr != ''", context, context.getRoot()));
        System.out.println(Ognl.getValue("shr", context, context.getRoot()));

        // 正确写法
        System.out.println("#this" +        Ognl.getValue("#this['shr']", context, context.getRoot()));
        System.out.println("#context"+   Ognl.getValue("#context['shr']", context, context.getRoot()));
        System.out.println("#root"+        Ognl.getValue("#root['shr']", context, context.getRoot()));
        System.out.println("nsztId"+       Ognl.getValue("nsztId", context, context.getRoot()));

    }

标签:...,shr,字符,getValue,Mybatis,报错,context,Ognl
From: https://www.cnblogs.com/bigjor/p/18181624

相关文章

  • idea使用svn报错-Error:Can not get current revision for file
    idea中使用svn结果报错:Error:CannotgetcurrentrevisionforfileD:/IDEADire…,并且idea提示一下警告:解决方案:安装svn的时候要主要勾选上第二个选项,如下图所示:最后在idea中配置svn的安装路径下的svn.exe,File->settings->VersionControl–>Subversion......
  • springboot整合mybatis-plus手动配置
    1、添加依赖<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.6</version></dependency><dependency>......
  • 解决 node-gyp 错误问题|node与python版本不匹配报错|node-gyp|vue
    项目要用到node-gyp(给爷爬)mac上没问题windows有问题看上面的日志,提到了python2.7看来这个模块用的上古时代的python2.7的技术windows的同学可以先安装python2这里下载:https://www.python.org/ftp/python/2.7/python-2.7.amd64.msi不要修改路径!!不要修改路径!!等......
  • 解决HtmlUnit执行JS报错提示ScriptException
    问题描述HtmlUnit作为一款比Selenium更轻量的HeadLess的Java版本浏览器模拟器,不需要在服务器上安装部署浏览器及其Driver程序。但是,众所周知,HtmlUnit对JS脚本的支持并不是很有话,GitHub中大部分的issue都和JS执行错误有关。笔者在实际使用(HtmlUnit4.1.0版本)过程中也遇到了JS执......
  • Windows平台git clone文件路径太长报错
    问题描述在Windows下拉取一些比较大的开源项目经常会提示文件路径太长(filenametoolong),然后死活都不成功解决办法1.配置gitgitconfig--systemcore.longpathstrue2.修改文件C:\ProgramFiles\Git\etc\gitconfig(需要以管理员身份打开)[core] autocrlf=true fscache=......
  • qt 使用windows 的USB库 hid.dll 报错 :undefined reference to `HidD_GetAttributes(v
     1、cmakeLists.txt文件引入相应的库: cmake_minimum_required(VERSION3.5)project(test1LANGUAGESCXX)file(GLOBSRC./*.cpp./*.h)add_executable(test1${SRC})include(GNUInstallDirs)target_link_libraries(${PROJECT_NAME}hidsetupapi)inst......
  • 报错sql_mode=only_full_group_by
    这个问题的原因是,在这种模式下,sql分组时默认只能select+分组字段以及聚合函数,相当于做一个规范检查但很多时候并不需要这个检查,因为真实sql中,分组后很多字段是1对1的,比如分组id,那么其他字段都可以查出来才对这是可以修改一下这种配置,基本上有三种方式:1、修改sql的配置文件......
  • Jenkins发版时报错Failed to instantiate [io.seata.spring.annotation.GlobalTransac
    Failedtoinstantiate[io.seata.spring.annotation.GlobalTransactionScanner]:Factorymethod'globalTransactionScanner'threwexception;nestedexceptionisjava.lang.ExceptionInInitializerError一开始以为是seata配置有问题,但最近也没有动过,直接执行发版脚本就没事......
  • mybatis获取自增主键
    获取自增主键实体对象设置主键自增,插入到数据库后拿到主键ID。数据库使用的是mysql。useGeneratedKeys非常简单的实现:mapper接口publicinterfaceUserMapperextendsBaseMapper<User>{intinsertUser(Useruser);}mapper文件<mappernamespace="com.oracat.moe.......
  • 解决远程调用三方接口:javax.net.ssl.SSLHandshakeException:sun.security.validator.Va
    一、前言最近在对接腾讯会议API接口,在鉴权完成后开始调用对方的接口,在此过程中出现调用报错:javax.net.ssl.SSLHandshakeException。二、出现原因当你在进行https请求时,JDK中不存在三方服务的信任证书,导致出现错误javax.net.ssl.SSLHandshakeException:sun.security.validator.Va......