[英]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.