我的Spring Boot应用程序只有一个index.html
页面。
我需要设置server.servlet.path=/api
。
为了得到index.html
,我必须按照上述设置localhost:8080/api/
。
我希望index.html
能够localhost:8080/
以及localhost:8080/api/**
之前的其他任何端点。
我该怎么办? 感谢
答案 0 :(得分:0)
配置server.servlet.path = / api后,DispatcherServlet将只处理请求匹配的URL Patterns / api /**.
实现您的要求的一种方法是使用普通的Servlet。
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.StreamUtils;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.Charset;
@WebServlet(urlPatterns = {"/"})
public class RootServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
ClassPathResource resource = new ClassPathResource("static/index.html");
String content = StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset() );
resp.getWriter().write(content);
}
}
现在您可以使用@ServletComponentScan
注释注册Servlet。假设您将RootServlet放在com.myapp.servlets
包中:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan(basePackages = "com.myapp.servlets")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}