gpt4 book ai didi

java - 如何将所有调用映射到 springboot Controller 中的 *.html ?

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:14 25 4
gpt4 key购买 nike

我正在尝试使用 Thymeleaf 模板和 springboot api 提供动态 html 页面。这就是我想要实现的场景。

当有人发出以下请求时:主机名/客户端,那么应用程序将返回一个 Json 对象;另一方面,如果有人发出以下请求:主机名/client.html,则该请求将在不同的 Controller 中捕获,以便我可以操作将返回的 View 。

客户端 Controller 这个类按预期工作,它返回一个 Json 对象

@RestController
public class ClientController {

@Autowired
public ClientService clientServiceImp;

@RequestMapping("/client")
public Client get(@RequestParam(value="name", defaultValue="World") String name){
return clientServiceImp.getClient(name);
}
}

家庭 Controller 此类的方法不会将调用映射到 *.html

@Controller
public class HomeController {
@RequestMapping(value={"/*.html"}, produces="text/html")
public String getIndex(Model model, HttpServletRequest request){

// I will set here the thymeleaf fragment location based on the resource requested.
return "index";
}

*这是我调用 hostname/client.html 后收到的错误白标错误页面*此应用程序没有/error 的显式映射,因此您将其视为后备。2016 年夏令时 1 月 25 日星期一 16:04:56出现意外错误(类型= Not Acceptable ,状态=406)。找不到可接受的表示**

Springboot基本配置

@SpringBootApplication(scanBasePackages = {"com.serviceira"})
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}

需要指出的是,我没有为应用程序设置任何其他配置。预先感谢您的帮助。

最佳答案

ClientController 正常工作的原因是因为您将其标记为 @RestController,您告诉 Spring 将响应直接写入 html 页面。

但是,您的 HomeController 未找到映射,因为您尚未设置 servlet 映射。

如果您使用的是 Java 配置:

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class WebAppInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
WebApplicationContext context = getContext();
servletContext.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("*.html"); // HERE YOU ARE SETTING THE .html mapping
}

private AnnotationConfigWebApplicationContext getContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation("your package name here");
return context;
}

}

如果您使用 XML,除了设置servlt 之外,您还需要像这样的映射:

 <servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/servlet-config.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

关于java - 如何将所有调用映射到 springboot Controller 中的 *.html ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com