SpringMVC 常用注解

本文详细介绍了Spring MVC框架中常用注解的功能与使用方法,包括@Controller、@RequestMapping、@RequestParam、@PathVariable、@RequestHeader、@RequestBody、@Autowired与@Resource等,帮助读者深入理解Spring MVC的工作原理。

1.@controller 注解
Controller 注解类型用于指定Spring类实例是一个控制器,被注解的类不需要继承特定的父类或则特定的接口,相对于实现接口变得更加简单。
分发处理器会扫描使用了该注解的类的方法,并检测是否使用了@RequestMapping 注解,而使用RequestMapping 注解的方法才是真正处理请求的处理器。
为了保证Spring能找到控制器,需要完成两件事情:

  1. 在SpringMVC 配置文件的头文件中引入spring-context
  2. 使用< context:component-scan/> 元素:启动包扫描功能,将注册带有@Controller @Service @Component @repository 等注解的类成为Spring 的Bean

2.@RequestMapping注解
开发者需要在控制器内部每一个请求动作开发一个处理方法,@Request Mapping 注解类型指示Spring用哪一个类或则方法来处理请求动作

在请求方法可出现和返回的参数类型中,最重要的就是Model 和 ModelAndView ,控制器执行业务逻辑,用于产生数据模型(model) ,而视图(view)用于渲染模型数据。

3.@RequestParam注解
RequestParam 注解类型用于将指定的请求参数赋值给方法中的形参

语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
value:参数名
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数(这里的参数名必须与提交时候的参数名一致),如果不包含就报错。
defaultValue="" :当required为FALSE时候,且参数不一致时候使用
@requestMapping(value="/login")
public ModelAndView login(
	@requestParam("loginname") String loginname1,#与接收的参数名可以不一致
	@requestParam("password") String password){
	...}

4.@PathVariable 注解
PathVariable注解类型可以非常的方便获取请求URL中的动态参数

@RequestMapping(value="/pathTest/{userId}")
public void pathVariableTest(@PathVariable Integer userId)

5.@RequestHeader 注解
RequestHeader 注解类型用于将请求的头信息数据映射到功能处理方法的参数上

@ReuestMapping(value="/requestHeaderTest")
public void requestHeadertest(
	@RequestHeader("User-Agent") String userAgent)...

6.@requestBody 注解
RequestBody 注解用于读取Request 请求的body 部分数据,使用系统默认配置的HttpMessageConverter 进行解析,然后将对应的数据(转换为相应对象)绑定到Controller 方法的参数上。
在Json 格式转化中,需要实现加入JackSon jar包到WEB-INF/lib 下
0.配置默认转化器

<mvc:annotation-driven/>

1.Ajax传递json字符串到后台

<script type="text/javascript">  
    $(document).ready(function(){  
        var DataArray=[];  
        var data1={"userName":"wangkangning","address":"guangzhou"};  
        var data2={"userName":"wangchao","address":"chengdu"};  
        DataArray.push(data1);  
        DataArray.push(data2);         
        $.ajax({ 
            type:"POST", 
            url:"user/saveUser", 
            dataType:"json",      
            contentType:"application/json",//发送至服务器时的内容编码格式。             
            data:JSON.stringify(DataArray), 
            success:function(data){                //请求成功后的回调函数。
            }
          	error:function()
          	{alert("error");}
         }); 
    });  
</script>

2.RequestBody 接收Json字符串并绑定(相同名称进行绑定),转为为相应对象类型

@RequestMapping(value = "user/saveUser", method = RequestMethod.POST) 
    @ResponseBody  
    public void saveUser(@RequestBody List<User> users) {
      //使用Jackson库进行处理
      ObjectMapper mapper =new ObjectMapper();
      for(int i=0;i<user.size();i++)
      {
          String json =mapper.writeValueAsString(users[i]); //将user对象转换为json输出。
      }
      User user =  new User();
  	  user = mapper.readValue(json,User.class);  //将json转换为json对象。
  	  System.out.println(user);
    }

7.@Autowired与@Resource
1)@Resource装配顺序

  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配

主要区别

  1. 列表内容@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
  2. @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象(对应xml配置中配置了该bean对象)必须存在,如果要允许null值,可以设置它的required属性为false(如果直接通过xml配置方式代替Autowired则需要包含该属性的类拥有该属性的getter与setter 方法)
  3. @Resource(这个注解属于J2EE的,是JSR规范定义的注解),判断@Resource注解括号中的name属性是否为空,如果为空:看spring容器中的bean的id与@Resource要注解的那个变量属性名是否相同,如相同,匹配成功;如果不相同,看spring容器中bean的id对应的类型是否与@Resource要注解的那个变量属性对应的类型是否相等,若相等,匹配成功,若不相等,匹配失败。如果@Resource注解括号中的name属性不为空,看name的属性值和容器中的bean的id名是否相等,如相等,则匹配成功;如不相等,则匹配失败。
  4. 推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。

进一步可以参考博客: https://www.cnblogs.com/szlbm/p/5512931.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值