spring Boot @RestController注解的理解

最近在学spring Boot,就做一个@RestController学习笔记,加深印象,虽然很多人做过,也很详细,但还是想自己做一遍,加深印象,当然,个人理解,肯定有很多不严谨,甚至错误的地方,但求能有所收获就行

View可以不严谨的理解成xxx; 这里有2种形式

       1.对于有返回值的函数,return xxx,xxx是个地址,jsp访问页面的地址或者html访问页面的地址

         它将由url视图解析器解析,它被作为最终视图的url的一部分,然后和相关配置组合起来,就是最终的视图地址url,然后再按照地址进行后端的视图渲染

       2.对于void型的函数,xxx是json字符串,或者html字符流式的字符串,或者。。。。。字符串
         

  PrintWriter out=response.getWriter();

           out.writer(xxx);

            2.1 .html字符流形式:

StringBuffer sbHtml = new StringBuffer();
        sbHtml.append("<!doctype html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
        sbHtml.append("<title>支付宝即时到账交易接口</title></head><body>"+ user.getNo() +"</body></html>");
        out.write(sbHtml.toString());

                         

                 将HTML的字符流输出打印到了--发送请求的浏览器端

           

           2.2.json字符串:

Map<String, Object> map = new HashMap<>();
            map.put("result", "ok");
            map.put("data", scoreList);
            printWriter.write(JSON.toJSONString(map));

                 个人理解:它本质上是html字符流,将json字符串放入了html字符流的<body></body>标签内

                   其它格式的还有xml。。。。。

     

Controller相当于dispatcherServlet(实现servlet接口)+Model(填充了数据的模型/模板类)

               @Controller执行过程

                  DispatcherServlet 分发请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View ()进行展示。。。。。。(@RequestMapping("/xxx")使得该controller能被外界进行访问,相当于servlet中的url映射,或者@WebServlet注解),,用@Controller初始化一个controller,用@RequestMapping给出它的访问路径,或者说触发路径 ,触发条件。

                @ResponseBody

                   将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的是,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输出流(InputStream(字节输入流),或者抽象类Reader(字符输入流),抽象类OutputStream(字节输出流)或者Writer(字符输出流))中,他的效果等同于通过response对象输出指定格式的数据,如: 

    //实体类User 

       public class User{private String UserName;private String password;get,set方法}

   //伪代码举例

    @RequestMapping("/login")
  @ResponseBody
  public User login(User user){
    return user;
  }
  那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'

  效果等同于如下代码:
  @RequestMapping("/login")
  public void login(User user, HttpServletResponse response){
    response.getWriter.write(JSONObject.fromObject(user).toString());
  }

        虽然函数有return值,但加了@ResponseBody,可将其当成void型函数来理解

@RestController注解相当于@Controller + @ResponseBody 合在一起的作用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值