Springboot注解@RestController

@RestController和@Controller在SpringBoot中的区别。@Controller用于声明Controller类,与视图解析器结合返回视图;@RestController是@Controller与@ResponseBody的组合,直接返回JSON到客户端。配置application.yml可以简化Controller返回页面的路径。添加@ResponseBody避免数据转换错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@RestController 和 @Controller 的区别

在这里插入图片描述

如图所说: @RestController 相当于 @Controller@ResponseBody 的组合。这里,了解了后两者的作用, @RestController 的作用自然就明白了。

  • @Controller :注解的作用是将当前类声明为 SpringMVC 中的 Controller ,注入到 Spring IOC 容器,IOC 容器的作用就是在程序开始运行时帮助开发人员自动实例化对象。单纯被 @Controller 修饰的方法返回的是字符串,或者与视图解析器结合使用返回字符串匹配的模板的名称,即直接渲染视图,与 HTML 页面配合使用,后端通过 model 对象(或者 modelAndView)绑定相关数据,传入前端展示到浏览器。

    @Controller
    public class userController {
    
    
        @GetMapping("/user")
        public String getUser(Model model) {
    
            model.addAttribute("name","张三");
            model.addAttribute("age", 25);
            return "userInfo";
        }
    }
    
    
  • user.html 视图代码:

    • 这里涉及到一个知识:springboot 如何从 controller 返回到页面

      • 这里需要在 springboot 的默认配置文件 application.yml(没有则在 “resource” 下手动创建一个) 添加地址修饰

        spring:
          mvc:
            view:
              prefix: / # 地址前缀
              suffix: .html # 地址后缀
        

        这样配置的好处就是在 controller 返回地址是,只需要写字符串匹配的页面模板名称,如:return "userInfo" ,如果没有配置,则需要返回完整的地址,如:return "/userInfo.html"

    <html xmlns:th="http://thymeleaf.org">
        <body>
            <div>
                <p th:text="'name:' + ${name}"></p>
                <p th:text="'age:' + ${age}"></p>
            </div>
        </body>
    </html>
    

在这里插入图片描述

使用 @Controller + @ResponseBody,进行测试。

import java.util.HashMap;
import java.util.Map;

@Controller // 可以将@Controller + @ResponseBody 直接替换成 @RestController,也是同样的效果
public class helloController {

    @ResponseBody
    @GetMapping("/")
    public String getUser() {
        return "Hello World!";
    }
	
    @ResponseBody
    @GetMapping("/Info")
    public Map getInfo(){ // 不添加 @ResponseBody,单纯的@Controller只能返回String 字符串,见下图3
        return new HashMap<String, String>(){{
            put("name", "springboot");
        }};
    }

}

在这里插入图片描述

  • @ResponseBody :注解的作用将修饰接口的返回值以 JSON 字符串的形式返回给客户端,如果返回的是 String 类型的数据,则以 Stirng 字符串返回。

在这里插入图片描述

如果接口返回的是其他数据类型,如:MapObject 等,不添加 @ResponseBody,单纯的 @Controller 只能将无法识别并产生如下错误页面。

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值