spring Boot @RestController注解的理解

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 合在一起的作用。

猜你喜欢

转载自blog.csdn.net/hyl999/article/details/88363552