Шаблон проверки соответствия Bean: соответствует N разрядам, регулярное выражение не работает в XML - PullRequest
0 голосов
/ 27 апреля 2020

Шаблон ограничения проверки Bean (соответствует N разрядам регулярного выражения) не работает, если указано в XML. например,

public class Foo {
    @Pattern(regexp="\\d{10}")
    private String phoneNumber;
}

phoneNumber: 1234567890

Аннотация работает.

XML:

<bean class="Foo">
        <field name="phoneNumber">
            <constraint annotation="javax.validation.constraints.Pattern">
                <element name="regexp">\\d{10}</element>
            </constraint>
        </field>
</bean>

Ошибка:

javax.validation.ConstraintViolationException: phoneNumber: must match the following regular expression: \d{10}

При изменении шаблона на:

 <element name="regexp">\d{10}</element>

Ошибка:

java.util.IllegalFormatConversionException: d != java.lang.String
    at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4302)
    at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2793)
    at java.util.Formatter$FormatSpecifier.print(Formatter.java:2747)
    at java.util.Formatter.format(Formatter.java:2520)
    at java.util.Formatter.format(Formatter.java:2455)
    at java.lang.String.format(String.java:2940)
    at org.apache.bval.util.Exceptions.lambda$create$1(Exceptions.java:49)
    at org.apache.bval.util.Exceptions.create(Exceptions.java:58)
    at org.apache.bval.util.Exceptions.create(Exceptions.java:49)
    at org.apache.bval.jsr.metadata.XmlBuilder.loadClass(XmlBuilder.java:531)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:545)
    at java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)

Что эквивалентно XML для @Pattern(regexp="\\d{10}")?

1 Ответ

0 голосов
/ 28 апреля 2020

Я не знаю, что такое регулярное выражение, но, если \d не работает, я думаю, [0-9] работает.

Вместо этого используйте:

[0-9]{10}

из \\d{10}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...