Я видел этот вопрос и этот вопрос. Я хочу сопоставить шаблон URL, поэтому я пишу свой тест в соответствии с ответами на эти вопросы.
@Autowired
private MockMvc mockMvc;
// Ant pattern, example URL: /courses/1/edit
private static final String CREATE_SUCCESS_URL = "/courses/[0-9]+/edit";
// ...
this.mockMvc.perform(
post("/courses/create")
.with(csrf())
.param("name", "New Course"))
.andExpect(redirectedUrlPattern(CREATE_SUCCESS_URL));
Я не уверен в правильном синтаксисе шаблона Ant, поэтому я также пробовал такие варианты, как:
CREATE_SUCCESS_URL = "/courses/{[0-9]+}/edit"CREATE_SUCCESS_URL = "/courses/\\d+/edit"CREATE_SUCCESS_URL = "/courses/\\d/edit"CREATE_SUCCESS_URL = "/courses/{\\d+}/edit"CREATE_SUCCESS_URL = "/courses/{id:\\d+}/edit"CREATE_SUCCESS_URL = "/courses/{id:[0-9]+}/edit"Но я всегда получаю исключение
java.lang.AssertionError: No Ant-style path pattern
at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:36)
at org.springframework.test.util.AssertionErrors.assertTrue(AssertionErrors.java:66)
at org.springframework.test.web.servlet.result.MockMvcResultMatchers.lambda$redirectedUrlPattern$3(MockMvcResultMatchers.java:153)
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:195)
at by.naxa.stackoverflow.CoursesTest.givenNameWhenSubmitCreateCourseThenSuccess(
...
Еще кое-что. Шаблон CREATE_SUCCESS_URL = "/courses/?/edit" работает нормально, но я хотел бы убедиться, что я сопоставляю только цифры.
Версия Spring Boot 2.1.2.RELEASE.




Допустимый шаблон пути Ant для ваших требований будет выглядеть так:
CREATE_SUCCESS_URL = "/courses/{[0-9]*}/edit"
или
CREATE_SUCCESS_URL = "/courses/{\\d*}/edit"
Этот AssertionError вызван следующим методом внутри org.springframework.util.AntPathMatcher:
public boolean isPattern(String path) {
return (path.indexOf('*') != -1 || path.indexOf('?') != -1);
}
Таким образом, любая строка, содержащая * или ?, будет работать.