在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;%$#@!/~]*
。
【参考方案1】:
使用你的正则表达式值,你应该得到错误
实体名称必须紧跟在实体引用中的“&”之后”,因为有 '&' 字符
在您的 xml 中,尝试如下更改正则表达式值,看看您是否仍然收到 IllegalStateException。
<property name="regex">
<value type="java.lang.String">[^&%$#@!/~]*</value>
</property>
【讨论】:
以上是关于在spring中将正则表达式设置为属性值的主要内容,如果未能解决你的问题,请参考以下文章
在 Google BigQuery 中将字符串保存为正则表达式
如何在 Asp.Net MVC 中将正则表达式分解为多个正则表达式?