@Controller @RequestMapping @RequestBody@ResponseBody 详解

版权声明:版权所有,请勿侵权
转自:https://blog.csdn.net/Smart_YC/article/details/52979982
@Controller

1:spring mvc 中将 controller 认为是 MVC中的C --控制层

2:规范命名 类名 xxxController

3:如果不基于注解: 该类需要继承 CommandController 或者 其他很多 参见 spring帮助

   如果基于注解:在类名前  加上         @controller   

4:补充:将类名前加上该注解,当spring启动 或者web服务启动 spring会自动扫描所有包(当然,这个可以设置)

     作用:  就是告诉服务器  这个类是MVC中的C    这个类可以接收用户请求    处理用户请求

问题:如何接收用户请求
1:假设用户请求URL 是: http://localhost:8080/项目名/xxx.do do不do都一样 不管这个do 你用什么都可以

 2:这个时候,spring开始在所有的 C  中,找对应的处理请求的方法

 3:在任意的可以C的类中,在你想要处理此请求的方法定义的前面 

     @RequestMapping("/xxx")          这个时候的xxx  就是用户请求的xxx     不管do

     public  String  方法名()

     {

       return  “aaa”;                          

        返回一个字符串,非常有用   要注意   用来决定要显示的MVC的 V  视图层 是哪个 

      }

问题:如何让spring 去扫描类 建立关联

   1:在配置文件中  (spring)的 假设是 mvc.xml  中

   2:加入 <context:component-scan  base-package="包路径"/>  

问题 如何返回到视图层 V

 1: 解决:此时,需要在配置文件中,加入视图解析器    有很多种 ,太多了 

 2:这里用基于jsp/jstl  视图

 3:在web.xml 中加入bean 配置
   <property  name="prefix" value="/WEB-INF/views"/>                     前缀

  <property  name="suffix"   value=".jsp"/>                                        后缀

小结:
1:spring 中的C 一般起类名 XXXController 在这个类里面 需要加入@controller 标志这个类可以作为请求处理类 也就是 控制类

2:这个控制类里面可以有很多方法,哪个方法用来处理用户请求,就在那个方法前面 加 @RequestMapping(“/xxxxx请求路径”)

3;当请求处理完毕后 返回值 决定了 该处理完毕后 用户将跳转到那个页面 这个很重要

4:例如

@RequestMapping("/xxx") 这个时候的xxx 就是用户请求的xxx 不管do

     public  String  方法名()

     {

         return  “aaa”;                         

        返回一个字符串,非常有用   要注意   用来决定要显示的MVC的 V  视图层 是哪个 

   }

返回 aaa 根据配置文件中的 视图处理器配置 加入前缀 后缀

页面将跳转到 /WEB-INF/views/aaa.jsp

@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。
类定义处:规定初步的请求映射,相对于web应用的根目录;
方法定义处:进一步细分请求映射,相对于类定义处的URL。如果类定义处没有使用该注解,则方法标记的URL相对于根目录而言;
RequestMapping注解有六个属性,下面我们把她分成三类进行说明。

还有一个注意的,@RequestMapping的默认属性为value,所以@RequestMapping(value="/example")和@RequestMapping("/example")是等价的。
@RequestMapping除了可以指定URL映射外,还可以指定“请求方法、请求参数和请求头”的映射请求
注解的value、method、params及headers分别指定“请求的URL、请求方法、请求参数及请求头”。它们之间是与的关系,联合使用会使得请求的映射更加精细。
 2.1 method属性可以指定请求的类型,http中规定请求有四种类型:get,post,put,delete。其值在枚举类型RequestMethod中有规定。
2.2 params和headers支持简单的表达式:
  —— params1:表示请求必须包含名为params1的请求参数
   —— !params1:表示请求不能包含名为params1的请求参数
  —— params1 != value1:表示请求必须包含名为params1的请求参数,但是其值不能是value1
  —— {“params1 = value1”, “param2”}:表示请求必须包含名为params1和params2两个请求参数,且params1的值必须为value1
2.3 Ant风格资源地址支持3种通配符:
   —— ? : 匹配文件名中的一个字符
   —— * : 匹配文件名中的任意多个字符(至少有一个字符)
   —— ** : 匹配多层路径(至少有一层)

@RequestMapping支持Ant风格的URL:

—— /user/create?? 匹配/user/createAA、/user/createBB等URL (??匹配任意两个字符)
   —— /user/*/createUser 匹配/user/aaa/createUser、/user/bbb/createUser等URL (*匹配任意字符)
   —— /user/**/createUser 匹配/user/createUser、/user/aaa/bbb/createUser等URL (**匹配任意多层路径)

注意:其?和*必须要有,如果为空,则不符合
  2.4 @PathVariable 映射URL绑定的占位符
  可以在控制器处理方法的入参中使用 @PathVariable 获取到URL中占位符参数。 URL中的{xxx}占位符可以通过 @PathVariable(“xxx”) 绑定到操作方法的入参中。

@RequestBody

作用:

  i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;

  ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

使用时机:

A) GET、POST方式提时, 根据request header Content-Type的值来判断:

application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);

B) PUT方式提交时, 根据request header Content-Type的值来判断:

application/x-www-form-urlencoded, 必须;
multipart/form-data, 不能处理;
其他格式, 必须;

说明:request的body部分的数据编码格式由header部分的Content-Type指定;
@ResponseBody
作用:

  该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:

  返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

作者:放眼未来活在当下
来源:CSDN
原文:https://blog.csdn.net/Smart_YC/article/details/52979982
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_35835118/article/details/83626939