繁体   English   中英

Spring Boot @GetMapping到以.jsp结尾的URL

[英]Spring Boot @GetMapping to a URL ending with .jsp

我们有一个以(客户要求)/test.jsp等结尾的URL。

现在我们终于运行了Spring Boot(2.1.1.RELEASE),我们想抛弃JSP并使用一些模板引擎,在本例中为Mustache。 我有一个像这样的控制器映射:

@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:run时的配置文件相同。

任何人都知道如何使它工作? 谢谢!

该点可能已被截断。 或逃脱。 您可能可以执行以下操作:

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

我知道您不完全想要一个变量,而是抛出一个想法

我终于解决了它-我可以进行所有工作,包括test.html,test.xml,test.wasd和test。 因此,我认为它本身不可能是Spring。 在各种Tomcat类中进行了一些调试之后,我发现了罪魁祸首:JspServlet以某种方式存在于类路径中,并被自动配置,起源于

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

删除依赖项会导致正确识别test.jsp。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM