在杰克逊,I can map YAML中的一个字符串:
regexField: "(\\d{2}):(\\d{2})"
到班级的Pattern
字段:
final class MappedFromYaml {
private Pattern regexField;
// ... accessors
}
杰克逊的ObjectMapper
将使用默认标记创建Pattern
。是否可以通过设置特定标志来创建它,例如Pattern.MULTILINE
?理想情况下,我希望能够在YAML中指定这些标志,但是如果没有为Java代码中的特定字段指定标志的解决方案也会受到赞赏。
答案 0 :(得分:1)
有两种方法。第一种是直接嵌入标志into the regex:
var recipients = new Dictionary<string, object>
{
{"test1@foo.com", new {name = "Foo Bar 1", customerNumber = "1234"}},
{"test2@foo.com", new {name = "Foo Bar 2", customerNumber = "9876"}}
};
Debug.WriteLine(recipients.ToJson());
否则请勿直接映射到regexField: "(\\d{2}):(\\d{2})(?m)"
,但要引入自定义类型,例如Pattern
PatternBuilder
可以从YAML构建
public class PatternBuilder {
public String regex;
public boolean multiline;
public Pattern pattern() {
int flags = 0;
if (multiline) flags |= Pattern.MULTILINE;
return Pattern.compile(regex, flags);
}
}