我们有一个以/custom.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的配置文件相同。
有人知道如何使它工作吗?谢谢!
答案 0 :(得分:0)
该点可能已被截断。或逃脱。 您可能可以执行以下操作:
@GetMapping("/{pageName:.+}")
public void test(
@PathVariable("pageName") String pageName) {
if(pageName.equals("test.jsp")) {
//...
}
我知道您不完全想要一个变量,只是抛出一个主意
答案 1 :(得分:0)
我终于解决了它-我可以进行所有工作,包括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。