【问题标题】:Spring Boot - @RestController annotation gets picked up, but when replaced with @Controller annotation, it stops workingSpring Boot - @RestController 注释被拾取,但是当用 @Controller 注释替换时,它停止工作
【发布时间】:2021-09-03 18:56:32
【问题描述】:

这是一个相同的虚拟项目:-

BlogApplication.java

@SpringBootApplication
@RestController
public class BlogApplication {

    public static void main(String[] args) {
        SpringApplication.run(BlogApplication.class, args);
    }
    
    @GetMapping("/hello")
    public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
        return String.format("Hello %s!", name);
    }
    
}

HtmlController.java

@Controller  //does not work
OR
@RestController //works
public class HtmlController {

    @GetMapping("/getHtmlFile")
    public String getHtmlFile() {
        return "Bit Torrent Brief";
    }
}

为什么@RestController 能够映射getHtmlFile@Controller/getHtmlFile 被命中时返回404?

【问题讨论】:

    标签: spring spring-boot model-view-controller spring-restcontroller


    【解决方案1】:
    @Controller
    public class HtmlController {
    
        @GetMapping("/getHtmlFile")
        public @ResponseBody String getHtmlFile() {
            return "Bit Torrent Brief";
        }
    }
    

    这行得通。

    【讨论】:

      【解决方案2】:

      @RestController 是@Controller 和@ResponseBody 的组合。 当你使用@Controller 时,你应该在你的方法返回类型之前写@ResponseBody

      【讨论】:

      • 哦,控制器正在初始化!我想在这里返回一个文件而不是响应正文,这就是我想使用@Controller 的原因。必须添加 thymeleaf 依赖项来呈现 html,因此我不必添加 ResponseBody 注释
      猜你喜欢
      • 2015-08-03
      • 2012-03-05
      • 1970-01-01
      • 2014-07-25
      • 2012-06-04
      • 2010-09-11
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多