Пожалуйста, помогите мне решить проблему, связанную с проверкой swagger, потому что одно и то же регулярное выражение работает в java, но не работает в swagger.
Рабочий код Java:
@Test
public void test1() {
String regex = "^((19|20)\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])$";
Assert.assertTrue("Date: matched.", Pattern.matches(regex, "19881231")); -- true
}
Swagger Contract.yml
properties:
lineofValue:
type: string
pattern: ^AB|CD$
description: mandatory
date:
type: string
pattern: ^((19|20)\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])$
description: mandatory
Пример запроса:
{
"lineofValue":"AB"
"date":"19881231"
}
Исключение :
{
"code": "400",
"status": 400,
"message": "Validation Failed: ECMA 262 regex \"^((19|20)\\\\d\\\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])$\" does not match input string \"19881231\""
}




Просматривая Swagger Documentation, кажется, что вам не надо нужно экранировать символ / так же, как вам нужно сделать в Java:
properties:
lineofValue:
type: string
pattern: ^AB|CD$
description: mandatory
date:
type: string
pattern: ^((19|20)\d\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])$
description: mandatory
Спасибо npinti за ваш ответ