Jackson YAML:使用标志

时间:2016-06-01 09:43:13

标签: java regex jackson yaml

在杰克逊,I can map YAML中的一个字符串:

regexField: "(\\d{2}):(\\d{2})"

到班级的Pattern字段:

final class MappedFromYaml {
    private Pattern regexField;
    // ... accessors
}

杰克逊的ObjectMapper将使用默认标记创建Pattern。是否可以通过设置特定标志来创建它,例如Pattern.MULTILINE?理想情况下,我希望能够在YAML中指定这些标志,但是如果没有为Java代码中的特定字段指定标志的解决方案也会受到赞赏。

1 个答案:

答案 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);
  }
}