Spring MVC динамически настраивается на получение 404, но работает с MockMVC - PullRequest
0 голосов
/ 02 июля 2018

У меня есть следующий контроллер (обратите внимание, как он настроен):

@Controller
public class MyController {
  @Autowired
  private RequestMappingHandlerMapping requestMappingHandlerMapping;

  @PostConstruct
  private void createRequestMapping() throws Exception {

    RequestMappingInfo commandExecutionRequestMappingInfo = 
    RequestMappingInfo
        .paths(endpointUri)
        .methods(RequestMethod.POST)
        .consumes(MediaType.APPLICATION_JSON_VALUE)
        .produces(MediaType.APPLICATION_JSON_VALUE)
        .build();

    requestMappingHandlerMapping
        .registerMapping(commandExecutionRequestMappingInfo, this,
        MyController.class.getDeclaredMethod("execute", String.class));


    RequestMappingInfo getAvailableCommandsRequestMappingInfo =
       RequestMappingInfo
        .paths(endpointUri)
        .methods(RequestMethod.GET)
        .build();

     requestMappingHandlerMapping
        .registerMapping(getAvailableCommandsRequestMappingInfo, this,
       MyController.class
         .getDeclaredMethod("getAvailableCommands", Model.class));
  }

  @ResponseBody
  private String execute(@RequestBody String command) {
    ...
  }

  private String getAvailableCommands(Model model) {
    model.addAttribute("docs", handlerDocs);
    return "docs";
  }

Существует страница docs.html, которая находится в main/resources/templates/docs.html.

Когда я запускаю тест с MockMvc, он видит вывод этой страницы:

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class ApplicationConfig {
}

Вот тестовый класс:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = ApplicationConfig.class)
@AutoConfigureMockMvc
public class SpringRestCommanderTest {

  @Autowired
  private MockMvc mvc;

  @Test
  public void testGetAvailableCommands() throws Exception {
    mvc.perform(get("/execute")).andDo(print());
  }
}

Однако, когда я запускаю ту же самую вещь в реальном приложении, она дает мне 404 для запроса GET, когда я пытаюсь сделать это в браузере.

Что странно, это то же самое /execute работает при выдаче ему запроса POST. Как вы можете видеть выше, динамическое отображение очень похоже между POST и GET.

Что я здесь не так делаю?

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