在spring中将正则表达式设置为属性值

Posted

技术标签:

【中文标题】在spring中将正则表达式设置为属性值【英文标题】:set a regular expression as a property value in spring 【发布时间】:2015-11-13 14:37:03 【问题描述】:

我需要将正则表达式设置为 spring 配置文件中的属性值。我的代码是这样的

xml文件

<property name="regex">
<value type="java.lang.String">[^&%$#@!/~]*</value>
</property>

java代码

public void setRegex(String regex) 


    try 
        Pattern.compile(regex);
        this.regex = regex;
     catch (PatternSyntaxException exception) 
        System.err.println(exception.getDescription());

    


但这不起作用。它在运行时抛出异常。

[exec] java.lang.IllegalStateException
     [exec]     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1588)
     [exec]     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
     [exec]     at com.sun.faces.application.ConverterPropertyEditorFactory$DisposableClassLoader.loadClass(ConverterPropertyEditorFactory.java:447)
     [exec]     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
     [exec]     at java.lang.Class.getDeclaredConstructors0(Native Method)
     [exec]     at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
     [exec]     at java.lang.Class.getConstructor0(Class.java:3075)
     [exec]     at java.lang.Class.newInstance(Class.java:412)
     [exec]     at com.sun.beans.finder.InstanceFinder.instantiate(InstanceFinder.java:96)
     [exec]     at com.sun.beans.finder.PropertyEditorFinder.find(PropertyEditorFinder.java:81)
     [exec]     at java.beans.PropertyEditorManager.findEditor(PropertyEditorManager.java:90)
     [exec]     at com.sun.faces.application.ApplicationImpl.addPropertyEditorIfNecessary(ApplicationImpl.java:690)
     [exec]     at com.sun.faces.application.ApplicationImpl.addConverter(ApplicationImpl.java:660)
     [exec]     at com.sun.faces.config.ConfigureListener.configure(ConfigureListener.java:727)
     [exec]     at com.sun.faces.config.ConfigureListener.configure(ConfigureListener.java:489)
     [exec]     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:381)
     [exec]     at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
     [exec]     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
     [exec]     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
     [exec]     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
     [exec]     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
     [exec]     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
     [exec]     at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:663)
     [exec]     at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1642)
     [exec]     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
     [exec]     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
     [exec]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
     [exec]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
     [exec]     at java.lang.Thread.run(Thread.java:745)

完整的堆栈跟踪

【问题讨论】:

it doesn't work 是什么意思?有任何错误信息吗? 它在运行时抛出 java.lang.IllegalStateException 请添加完整的堆栈跟踪。 请查看完整的堆栈跟踪 试试[^&amp;amp;%$#@!/~]* 【参考方案1】:

使用你的正则表达式值,你应该得到错误

实体名称必须紧跟在实体引用中的“&”之后”,因为有 '&' 字符

在您的 xml 中,尝试如下更改正则表达式值,看看您是否仍然收到 IllegalStateException。

<property name="regex">
    <value type="java.lang.String">[^&amp;%$#@!/~]*</value>
</property>

【讨论】:

以上是关于在spring中将正则表达式设置为属性值的主要内容,如果未能解决你的问题,请参考以下文章

在 Google BigQuery 中将字符串保存为正则表达式

正则表达式的全局匹配模式

如何在 Asp.Net MVC 中将正则表达式分解为多个正则表达式?

如何在 JavaScript 中将长正则表达式拆分为多行?

如何编写一个正则表达式命令在 python 中将字符串转换为日期时间格式?

在 PHP 中将文本列表转换为 html 的正则表达式