在 Spring Boot 中使用 RestController 返回 Html 页面

问题描述 投票:0回答:2

我正在尝试获取我创建的 HTML 页面。这是我项目的结构:

这是“IndexController”类:

@RestController
@AllArgsConstructor
@RequestMapping(path = "/webpage")
public class IndexController {

        @GetMapping(path = {"mainpage"})
        @ResponseBody
        public String index(){
            return "Index";
        }
    
        @PostMapping("/check")
        public String CheckDataset(@ModelAttribute CheckModel checkModel){
            System.out.println(checkModel);
            return null;
        }
    
    }

当我直接从intellij打开HTML网页时:

完美打开,但是当我尝试从 Spring Boot 打开 HTML 时,只返回“索引”字符串。

你知道如何解决这个问题吗?

java html spring-boot web spring-restcontroller
2个回答
0
投票

要返回 HTML 页面(视图),您必须使用 Spring MVC,即

@Controller
而不是
@RestController
并返回
ModelAndView
index
作为视图名称:

@Controller
@AllArgsConstructor
@RequestMapping("/webpage")
public class IndexController {

    @GetMapping(path = {"mainpage"})
    public ModelAndView index() {
        final var modelAndView = new ModelAndView();
        modelAndView.setViewName("index");
        return modelAndView;
    }

    // other methods
}

0
投票

请注意,如果您需要显示 HTML 页面,您的类 IndexController 不应具有 @RestController,它应仅具有 @Controller。

简单来说@RestController = @Controller + @ResponseBody

在您的情况下,您使用的@RestController 注释默认将其中的所有方法设为@ResponseBody,您不必明确提及

@ResponseBody 注释不显示视图,而是发送一个字符串响应。

解决此问题的步骤:

  1. 在类级别将@RestController 注释更改为@Controller
  2. 从您计划显示 HTML 的方法中删除@ResponseBody
  3. 确保你的 POM.xml 中有 spring-boot-starter-thymeleaf 依赖

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.