情况:我想基于用户属性执行Hibernate验证(根据用户的帐户数据允许输入的不同验证规则) - 我认为必须可以使用.properties文件来指定特定的正则表达式,但我无法弄清楚出了什么问题:
我当前指定验证正则表达式的方法从特定接口文件中的常量中拉出该正则表达式(将所有内容保持在一起)并将其作为常量插入@Pattern()到每个变量的注释中 - 例如对于变量workPhone:
@Column(name = "WORK_PHONE")
@NotEmpty(message = "{ContactInfo.workPhone.notEmpty}")
@Pattern(regexp = PHONE_NUMBER_PATTERN_SL, message = "{ContactInfo.workPhone.regexp.msg}")
@Size(max = 10, message = "{ContactInfo.workPhone.size}")
protected String workPhone;
Run Code Online (Sandbox Code Playgroud)
...正则表达式存储在其中static final String PHONE_NUMBER_PATTERN_SL并且所有{ContactInfo.workPhone...}调用都来自.properties文件:
ContactInfo.workPhone.notEmpty=Please enter your phone number.
ContactInfo.workPhone.regexp.msg=Invalid characters entered in phone. Use this format XXX-XXX-XXXX.
ContactInfo.workPhone.size=Phone can not be longer than 10 digits.
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种安排使得验证模式在应用程序范围内(编译),因为我无法想办法为不同的公司,位置,就业位置等的不同用户更改它.为了能够区分基于这个信息,我还想将正则表达式存储在属性文件中,我尝试以这种方式包含它:
ContactInfo.workPhone.regexp=\d{3}-\d{3}-\d{4}
Run Code Online (Sandbox Code Playgroud)
同时在第一个代码清单中的第三行的注释中包含引用:
@Pattern(regexp = "{ContactInfo.workPhone.regexp}", message = "{ContactInfo.workPhone.regexp.msg}")
Run Code Online (Sandbox Code Playgroud)
然后,我会为不同的场合切换属性文件,例如允许/要求非美国电话号码格式.
问题:我可以做我想做的事吗?有没有更好的方法来指定模式(甚至可能允许数据库调用而不是属性文件)?
另外,我不是最好的(因为我从另一个开发人员手中接管),所以如果有人只能指向我关注使用@Pattern注释或其他Hibernate正则表达式验证标记的重点资源,那么可能会给我所需的所有信息.
TL; DR:是否可以对Hibernate模式验证中使用的表达式使用动态设置或修改的值,而不是预定义和预编译的常量?
如何从属性文件中删除键和值?我的属性文件包含以下内容:
key1=value1
key2=value2
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码删除条目key2=value2.之后,现在该文件具有以下值:
key1=value1
key2=value2
Wed Mar 06 12:36:32 IST 2013
key1=value1
Run Code Online (Sandbox Code Playgroud)
用于删除条目的java代码:
FileOutputStream out1 = new FileOutputStream(file, true);
prop.remove(key);
prop.store(out1,null);
Run Code Online (Sandbox Code Playgroud)
我在做什么错误.如何在编写之前清除文件的全部内容.
我将我的应用程序打包为jar.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>...</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
而且我的.properties文件放在里面src/main/resources.我可以随意将此文件移动到任何其他地方.我不希望将属性文件包含在jar中,而是放在同一个输出目录(我们得到jar的地方)并排放置.在Maven中最好的做法是什么?
我已经在这里寻找了一段时间的答案并且没有找到它,所以希望这不是一个骗局.
我有一个属性文件,主要包含键=值对,但也包含#comments.我需要将它放在字典中,这样我就可以随意获取值.在没有#comments的文件中,以下工作完美.
myprops = dict(line.strip().split('=') for line in open('/Path/filename.properties'))
print myprops['key']
Run Code Online (Sandbox Code Playgroud)
但是当有评论出现时却不是这样.如果#comment存在,字典说
"ValueError: dictionary update sequence element #x has length 1, 2 is required"
Run Code Online (Sandbox Code Playgroud)
我试过用条件包装字典创建
if not line.startswith('#'):
Run Code Online (Sandbox Code Playgroud)
但我似乎无法让它发挥作用.建议?谢谢!
我正在使用load()属性类加载我的属性文件.我能够使用set,hashmap,treeset,enumeration读取属性类的键值对,但它不会检索重复对.重复对只检索一次.
我在三个属性文件中声明了三个语言环境转换,如Strings.properties,Strings_es_ES.properties和Strings_en_GB.properties(适用于US,ES和UK)
在Strings_es_ES.properties中,我声明了如下所示的字符串,并使用UTF-8格式设置属性文件.
admin.main.numberofrewards=Número de recompensas:
admin.main.categorylist=lista Categoría
Run Code Online (Sandbox Code Playgroud)
我在.jsp文件中使用上面的资源包,如下所示
<%@ page pageEncoding="UTF-8"%>
<h2><spring:message code="admin.main.numberofrewards"/></h2>
<p><spring:message code="admin.main.categorylist"/></p>
Run Code Online (Sandbox Code Playgroud)
我在浏览器上输出如下所示
Nómero de recompensas
lista CategorÃa
Run Code Online (Sandbox Code Playgroud)
请帮帮我
我正在使用一个加载.properties文件的应用程序,java.util.Properties如下所示:
Properties _properties = new Properties();
_properties.load(new FileInputStream("app.properties"));
Run Code Online (Sandbox Code Playgroud)
属性文件(最初)是这样的:
app=myApp
dbLogin=myDbLogin
version=0.9.8.10
server=1
freq=10000
stateGap=360000
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我打电话时_properties.getProperty("app"),它总是返回null,但是我可以加载所有其他属性而没有任何问题.我通过在属性文件的顶部添加注释来解决问题,然后一切正常.
我的问题是:为什么Java会这样做?我似乎无法找到任何关于此的文档,这似乎是违反直觉的.
我正在使用.properties文件进行邮件国际化.例如:
HELLO_WORLD = Hello World
HELLO_UNIVERSE = Hello Universe
Run Code Online (Sandbox Code Playgroud)
然后在Java代码中:
String foo = resourceBundle.getString("HELLO_WORLD");
Run Code Online (Sandbox Code Playgroud)
字符串文字是"HELLO_WORLD"有问题的,因为它们容易出错并且无法自动完成.我想从属性文件中的键生成代码,如下所示:
public interface Messages { // Or abstract class with private constructor
public static final String HELLO_WORLD = "HELLO_WORLD";
public static final String HELLO_UNIVERSE = "HELLO_UNIVERSE";
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
String foo = resourceBundle.getString(Messages.HELLO_WORLD);
Run Code Online (Sandbox Code Playgroud)
有没有标准的方法来做到这一点?我更喜欢Maven插件,但我可以手动运行的任何独立工具都足以满足我的需求.
我正在使用各种文件来翻译Java应用程序.现在我想要一个Gradle任务,或者想要修改一个任务,通过将其替换为ASCII表示来自动转义任何unicode字符,就像Java的工具一样.ResourceBundle*.propertiesnative2ascii
这是我到目前为止使用我的构建文件所做的,但输出仍未转义:
import org.apache.tools.ant.filters.EscapeUnicode
tasks.withType(ProcessResources) {
filesMatching('**/*.properties') {
println "\t-> ${it}"
filter EscapeUnicode
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
我为我的应用程序安装了一个spring cloud服务器,在启动时提供公共属性文件.
"正常"功能正常运行.应用程序获取文件层次结构并获得对加载参数的完全访问权限.
Application.properties
Application-<profile>.properties
<applicationname>.properties
...
Run Code Online (Sandbox Code Playgroud)
现在的问题是:如何在通用命名旁边加载配置文件?
如果我在repositoy中存储另一个文件,例如sharedCommonServers.properties,如何使用配置服务器另外加载此文件?此文件包含某些但不是所有程序使用的属性.
先感谢您!
亨德里克
properties-file ×10
java ×8
spring ×2
collections ×1
dictionary ×1
duplicates ×1
gradle ×1
jar ×1
maven ×1
maven-3 ×1
maven-plugin ×1
properties ×1
python ×1
regex ×1
unicode ×1
utf-8 ×1