我无法在springboot中呈现html页面。 这是代码...
@RestController
public class ProductController {
@Autowired
ProductService service;
@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
dateFormat.setLenient(false);
webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
@RequestMapping(value = { "/", "/home" })
public ModelAndView home() {
System.out.println("sdasasas");
return new ModelAndView("home");
}
但是每当我按下http://localhost:8080/home时,它就会显示以下日志 -8080-exec-4] o.s.w.s.v.ContentNegotiatingViewResolver:在给定的[text / html,application / xhtml + xml,image / webp, 图片/ apng,应用程序/有符号交换; v = b3,应用程序/xml;q=0.9, / ; q = 0.8] 2019-07-31 16:05:25.354调试14850 --- [nio-8080-exec-4] o.s.w.servlet.view.InternalResourceView:视图名称'home',模型{} 2019-07-31 16:05:25.354调试14850 --- [nio-8080-exec-4] o.s.w.servlet.view.InternalResourceView:转发至 [/WEB-INF/html/home.html] 2019-07-31 16:05:25.354调试14850 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet:GET的“ FORWARD”调度 “ /WEB-INF/html/home.html”,参数= {} 2019-07-31 16:05:25.356调试14850 --- [nio-8080-exec-4] o.s.w.s.handler.SimpleUrlHandlerMapping:映射到 ResourceHttpRequestHandler [“ classpath:/ META-INF / resources /”, “ classpath:/ resources /”,“ classpath:/ static /”,“ classpath:/ public /”, “ /”] 2019-07-31 16:05:25.356 WARN 14850 --- [nio-8080-exec-4] o.s.w.s.r.ResourceHttpRequestHandler:带有“ WEB-INF”的路径或 “ META-INF”:[WEB-INF / html / home.html] 2019-07-31 16:05:25.356调试14850--[nio-8080-exec-4] o.s.w.s.r.ResourceHttpRequestHandler:找不到资源 2019-07-31 16:05:25.357调试14850 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet:从“ FORWARD”退出 调度状态404 2019-07-31 16:05:25.357调试14850--[nio-8080-exec-4] o.j.s.OpenEntityManagerInViewInterceptor:关闭JPA EntityManager 在OpenEntityManagerInViewInterceptor中 2019-07-31 16:05:25.357调试14850--[nio-8080-exec-4] o.s.web.servlet.DispatcherServlet:已完成404 NOT_FOUND 2019-07-31 16:05:25.357调试14850 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet:GET的“ ERROR”派发 “ /错误”,参数= {}
答案 0 :(得分:2)
在使用Spring MVC时,应始终使用@Controller
注释。
@RestController
与@Controller
不同。
@Controller
返回一个在MVC应用程序中使用的视图,
@RestController
返回一个响应(大多数为Json)时,它会使用Jackson罐将您的Java对象转换为Json,这些都用于api。
答案 1 :(得分:1)
@RestController不能用于返回要解析的视图。它应该返回将被写入响应主体的数据
@RestController //change it to @Controller
public class ProductController {
@Autowired
ProductService service;
@Controller和@RestController批注之间的区别在于,@Controller是创建模型对象的Map并查找视图,但是@RestController只是返回对象,并且对象数据以JSON或XML的形式直接写入HTTP响应中
答案 2 :(得分:0)
对于基于@RestController
,该应用必须返回视图。它主要用于REST API。虽然 @Controller
可以返回视图
有关@RestController
的更多信息:
@Controller
的专用版本,其中添加了
@Controller
和@ResponseBody
自动注释。因此我们不必在我们的映射方法中添加@ResponseBody
。那意味着
@ResponseBody
是默认活动状态。@RestController
,则无法返回视图(通过使用
Viewresolver
(春季/春季启动)@RestController
还将响应转换为JSON/XML automatically
,因为@ResponseBody
使返回的对象成为可能在体内的对象,e.g. JSON or XML
@RestController
public class ProductController {
@Autowired
ProductService service;
@RequestMapping(value = { "/", "/home" })
public @ResponseBody ModelAndView home() {
System.out.println("sdasasas");
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("home");
return modelAndView;
}
}
无需指定spring.mvc.view.prefix=/WEB-INF/html/ spring.mvc.view.suffix=.html
此外,请确保您没有任何带有@EnableWebMvc
批注的其他类。这会弄乱 spring-boot自动配置。