@Controller @RequestMapping @RequestBody@ResponseBody 详解

@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 配置

<bean class="org.s...f....web.servlet.view.InternalResourceViewResolver">

       <property  name="prefix" value="/WEB-INF/views"/>                     前缀

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

</bean>

小结:

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等)使用;



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值