Spring Boot @GetMapping на URL, заканчивающийся на .jsp - PullRequest
0 голосов
/ 08 февраля 2019

У нас есть URL, который должен заканчиваться (требование клиента) чем-то вроде /test.jsp.

Теперь, когда мы наконец запустили Spring Boot (2.1.1.RELEASE), мы хотели быугробите JSP и используйте какой-нибудь шаблонизатор, в данном случае усы.У меня есть отображение контроллера, как это:

@Controller
@RequestMapping("/")
public class TestController  {

    @GetMapping(path = "/test.jsp")
    public ModelAndView test(...) {...}
}

Это просто не работает.У меня есть

spring.mvc.pathmatch.use-suffix-pattern = true

В наших application.properties все, что связано с spring.mvc.view, закомментировано, когда я добавляю другое сопоставление с помощью просто / test, оно работает для / test.Забавно то, что мне удалось заставить работать точно такую ​​же вещь при использовании Spring MVC и Thymeleaf, но я не могу найти разницу.

Кроме того, я добавил для этого тест, например:

@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
class TestTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void test() throws Exception {
        final MockHttpServletRequestBuilder testRequestBuilder = MockMvcRequestBuilders.get("/test.jsp");

        MvcResult responseResult = mockMvc.perform(testRequestBuilder).andReturn();


        response = responseResult.getResponse();
        assertThat(response.getStatus(), equalTo(HttpStatus.OK.value()));
    }

}

Это отлично работает, содержание ответа тоже именно то, что я хочу.Профиль теста такой же, как и при использовании mvn spring-boot: на данный момент запустите.

Кто-нибудь получил идею о том, как заставить это работать?Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Я наконец решил это - у меня все работало, включая test.html, test.xml, test.wasd и test.Поэтому я подумал, что это не может быть весна сама по себе.После некоторой отладки в различных классах Tomcat я обнаружил виновника: JspServlet каким-то образом присутствовал в пути к классам и был автоматически настроен, начиная с

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>

Удаление зависимости привело к правильному распознаванию test.jsp.

0 голосов
/ 08 февраля 2019

Точка, вероятно, усекается.или сбежал.Вы, вероятно, можете сделать что-то вроде этого:

@GetMapping("/{pageName:.+}")   
public void test(
  @PathVariable("pageName") String pageName) {
     if(pageName.equals("test.jsp")) {
                   //...
}

Я знаю, что вы точно не хотите переменную, но просто бросаете идею

...