Spring注解:@RestController、@Controller、@ResponseBody 跳坑系列

我是 ABin-阿斌:写一生代码,创一世佳话。如果小伙伴们觉得我的文章有点 Feel ,那就点个赞再走哦。
在这里插入图片描述

前言

  今日在写一个 SpringBoot 结合 Thymeleafdemo 的时候遇到了一个低级错误,在写个测试案例的时候可能是平时写习惯了,一上来就是一个 @RestController 注解。结果导致前端一直取不到值,这可把我呼住了。一开始还以为代码出错了,结果才发现是入坑了…

入坑场景


1、后台:

就是这里使用了这个@RestController注解,导致我前台一直获取不到数据。

/**
 * @author ABin-阿斌
 * @description: Thymeleaf 模板引擎
 * @date 2020/12/27 22:22
 */
@RestController
public class TestController {

    @RequestMapping("/tt")
    public String test(Model model) {
        //将数据存放进去
        model.addAttribute("msg", "2020年接近尾声");
        return "test";
    }
}    

2、前台:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>模板引擎演示</title>
</head>
<body>
    <h3 style="color: red">两只老虎会跳舞,小兔子乖乖拔萝卜!</h3>
    <!--th:text就是将div中的内容设置为它指定的值,和Vue一样-->
    <div th:text ="${msg}"></div>
</body>
</html>

原理分析

@RestController

  如何我们想要获取前端那边的一个数据的话(jsp 页面或者 html 页面),那么就要注意不要使用 @RestController。如果只是使用 @RestController 注解 Controller 层的话,那么 Controller 层中的方法无法返回 jsp 页面,或者 html 。因为配置的视图解析器 InternalResourceViewResolver 不会起到任何作用,那么结果返回的内容就是 return 里的内容,而不是前端那边的内容。

  想要达到我们预期的一个结果让它返回我们自己指定的一个页面,那么我们只能使用 @Controller 配合视图解析器 InternalResourceViewResolver 才行。

1.1 @RestController 注解解析

  当我们使用 @RestController 注解时,我们不在需要将 @ResponseBody 注解添加到所有请求映射方法中,因为 @RestController 中为我们自动添加了 @Controller@ResponseBody 注解。

1.2 @ResponseBody 注解解析

  @ResponseBody 注解的作用是将 controller 的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到 response 对象的 body 区,通常用来返回 JSON 数据或者是 XML 数据。需要注意的是,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,它的效果等同于通过 response 对象输出指定格式的数据。

注意事项

  在使用 @RequestMapping 后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBodyHTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值