java 在Sping Boot 中使用RestController返回Html页面

qzwqbdag  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(493)

我试图得到我创建的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网页时:

打开完美,但当我试图从Sping Boot 打开HTML时,只返回“Index”字符串。
你知道怎么解决这个问题吗?

jw5wzhpr

jw5wzhpr1#

请注意,如果你需要显示一个HTML页面,你的类IndexController不应该有@RestController。它应该只有@Controller
简单来说@RestController = @Controller + @ResponseBody
在您的例子中,您使用的@RestController注解使其中的所有方法默认为@ResponseBody,并且您不必显式地提及
@ResponseBody annotation不显示视图,而是发送String响应。
解决此问题的步骤:
1.在类级别将@RestController注解更改为@Controller
1.从计划显示HTML的方法中删除@ResponseBody
所以你的代码是

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

    @GetMapping(path = {"mainpage"})
    public String index(){
        return "Index";
    }

   //Other methods
    
}

只要确保您的POM.xml中有spring-boot-starter-thymeleaf依赖项即可
谢谢。

f4t66c6m

f4t66c6m2#

要返回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
}

相关问题