1、概述

  Spring MVC框架提供了功能强大的注解,大大简化了代码开发的同时也提升了程序的可扩展性

2、注解

2.1、@RequestMapping

  Spring MVC通过@RequestMapper 注解将URL请求与业务方法进行映射

  在控制器的类定义处以及方法定义处都可添加@RequestMapper,在类定义处添加@RequestMapping注解,相当于多了一层访问路径

@RequestMapping("/")
public class IndexController { @RequestMapping(value = "/index",method = RequestMethod.GET)
public String index(){
return "index";
}
}

  参数

2.1.1、value:指定URL请求的实际地址,是@RequestMapping的默认值

  @RequestMapping("hello")  等价于 @RequestMapping(value = "hello")

2.1.2、method:请求指定的method类型,GET/POST/PUT/DELETE等

  @RequestMapping(value = "hello" ,method = RequestMethod.POST)

  表示只有POST请求可以访问该方法,若使用GET请求访问,直接报错

2.1.3、params:指定request中必须包含某些参数值,否则无法调用该方法。

  @RequestMapping(value = "hello", params={"name","id=10"})

  URL请求必须包含name和id属性,并且id的值必须为10,才能调用

2.2、参数绑定

  params是对URL请求的参数进行限制,不满足条件的URL无法到达业务的方法,这个特性并不是我们开发中常用到的,我们需要用到的是业务方法中获取URL的参数,实现这一步很简单

  1. 在业务方法定义时声明参数列表
  2. 给参数列表添加@RequestParam注解

  @RequestMapping(value = "paramsBind")

  public String paramsBind(@ReqeustParam("name")String name ,@RequestParam("id")int id )

  将URL请求的参数name和id分别赋给形参name和id,同时进行数据类型的转换,URL参数都是String类型的,根据形参的数据类型,将id转换为int类型,所以可以看到打印的num值为20,完成了数学运算

  上述这些工作都是由HandlerAdapter来完成的。

2.3、Spring MVC同时也支持RESTful风格的URL,具体见Spring Boot文档中的介绍

2.4、使用pojo绑定参数

  Spring MVC会根据请求的数据名和pojo属性名进行自动匹配,自动为该对象填充属性值,并且支持级联属性。

  @ReqeustMapping("/addUser")

  public String getPOJO(User user )

3、数据绑定

  HTTP请求传输的参数都是String类型的,但是Handler业务方法中的参数都是我们指定的数据类型,如int、Object等,所以我们需要处理参数的类型转换。此项工作不需要我们开发人员去完成,Spring MVC的HandlerAdapter组件会在执行Handler业务方法之前,完成参数的绑定。

3.1、基本数据类型

  以int为例,后台需要int类型的参数,直接在业务方法定义处添加int类型的形参即可,HTTP请求参数名需要与形参名一直。

  @ResponseBody 注解直接返回字符串到前端,不需要返回JSP页面

  @RequestMapping(value = "/")

  @ResponseBody

  public String baseType(int id)

  测试,http请求不带参数,直接报500错误。

  可选的参数"id"不能转为ull,因为我们知道,基本数据类型不能赋值null,使用Integer 则不会存在问题。

  

  @RequestParam注解

  @RequestMapping(value = "/baseType",method = RequestMethod.GET)
  @ResponseBody
  public String baseType(@RequestParam(value = "1",required = false,defaultValue = "1") int id ){
  • value:将HTTP请求中名为id的参数与形参进行映射。
  • required=fase:id参数非必填,可省略
  • defaultValue="1",若HTTP请求中没有id参数,默认值为1

  @RequestBody注解

  读取HTTP请求参数,通过Spring MVC提供的HttpMessageConverter接口将读取的参数替换为json、XML格式的数据,绑定到业务方法的形参。

  @ResponseBody注解

  将业务方法返回的对象,通过HttpMessageConverter接口转为指定格式的数据,json、xml等,响应给客户端。

4、模型数据解析

  Spring MVC作为一个MVC框架,很重要的一项工作是在控制器获取模型数据并返回给客户端,即在JSP页面展示的模型数据。

  模型数据的绑定是由ViewResolver来完成的,开发时,先添加模型数据,再交给ViewResover来绑定。

  有以下几种方式添加模型数据:

  • Map

    需要在业务方法添加Map类型的入参,方法体中便可通过对入参的操作来完成模型数据的添加。    

@RequestMapping(value = "/map",method = RequestMethod.GET)
public String map(Map<String,Object> map){
User user = new User();
user.setId(1);
user.setUsername("zhangsan");
user.setPassword("password");
map.put("user",user);
return "test";
}
  • Model
@RequestMapping(value = "/model",method = RequestMethod.GET)
public String model(Model model){
User user = new User();
user.setId(1);
user.setUsername("zhangsan");
user.setPassword("password");
model.addAttribute("user",user);
return "test";
}
  • ModelAndViewer

  与Map或Model不同的是,ModelAndView不但包含模型数据,同时也包含了视图信息,所以使用ModelAndView来处理模型数据,业务方法的返回值必须是ModelAndView

  业务方法中对ModelAndView进行两个操作:填充模型数据和绑定视图信息

  • @SessionAttributes
  • @ModelAttribute

0001 - Spring MVC中的注解的更多相关文章

  1. Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法

    Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法 在Action中方法的返回值都是字符串行,一般情况是返回某个JSP,如: return "xx" ...

  2. Spring MVC 中 @ModelAttribute 注解的妙用

    Spring MVC 中 @ModelAttribute 注解的妙用 Spring MVC 提供的这种基于注释的编程模型,极大的简化了 web 应用的开发.其中 @Controller 和 @Rest ...

  3. spring 以及 spring mvc 中常用注解整理

    spring 以及 spring mvc 中常用注解整理 @RequestMapping(映射路径) @Autowired(注入 bean 对象) 例如: @Autowired private Bas ...

  4. Spring MVC中基于注解的 Controller

         终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响 ...

  5. Spring MVC中@RequestMapping注解使用技巧(转)

    @RequestMapping是Spring Web应用程序中最常被用到的注解之一.这个注解会将HTTP请求映射到MVC和REST控制器的处理方法上. 在这篇文章中,你将会看到@RequestMapp ...

  6. 在Spring MVC中使用注解的方式校验RequestParams

    概述   Spring MVC支持Bean Validation,通过这个验证技术,可以通过注解方式,很方便的对输入参数进行验证,之前使用的校验方式,都是基于Bean对象的,但是在@RequestPa ...

  7. Spring MVC中@ControllerAdvice注解实现全局异常拦截

    在网上很多都把Advice翻译成增强器,其实从翻译工具上看到,这个单词翻译是忠告,通知的意思. 首先这个注解实在Spring Web包下,而Spring MVC离不开Spring Web的依赖,所以经 ...

  8. spring mvc中的注解说明

    注解扫描 context:component-scan 包扫描 <context:component-scan base-package="org.bdp"> < ...

  9. Spring MVC 中的基于注解的 Controller【转】

    原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 H ...

随机推荐

  1. RPC简介及框架选择

    简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点.常见RPC框架,gRPC及序列化方式Protobuf等 HTTP协议 http协议是基于tcp协议的,tcp协议是流式 ...

  2. openstack--1--基础环境搭建

    Openstack介绍 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目. Openstack包含三大项 ...

  3. 集成学习之AdaBoost

    AdaBoost 当做出重要决定时,大家可能会考虑吸取多个专家而不只是一个人的意见,机器学习也是如此,这就是集成学习的基本思想.使用集成方法时有多种形式:可以是不同算法的集成,也可以是同一算法在不同设 ...

  4. video conference s/w

    CamFrogWindows | Mac OS | Linux (Server only) | iOS | Android | Windows PhoneCamFrog lets you set up ...

  5. HBase源码分析之WAL

    WAL(Write-Ahead Logging)是数据库系统中保障原子性和持久性的技术,通过使用WAL可以将数据的随机写入变为顺序写入,可以提高数据写入的性能.在hbase中写入数据时,会将数据写入内 ...

  6. perventDefault, stopPropagation, stopImmediatePropagation 三者的区别

    event有三种特别容易混淆的方法, 用来阻止默认事件的发生 1.  e.preventDefault(); 2. e.stopPropagation(); 3. e.stopImmediatePro ...

  7. kubernetes 中,Pod、Deployment、ReplicaSet、Service 之间关系分析

    deploy控制RS,RS控制Pod,这一整套,向外提供稳定可靠的Service. 详见:https://blog.csdn.net/ucsheep/article/details/81781509

  8. create-react-app-typescript 知识点

    github:https://github.com/wmonk/create-react-app-typescript 报错:Import sources within a group must be ...

  9. Jenkins 配置用户权限错误导致无法登录解决方案

    最初配置Jenkins的用户管理权限时,因为不熟悉很容易将用户角色配置错误,导致配置用户后无法登录系统: 登录系统时候提示"Access Denied": 解决办法: 进入Jenk ...

  10. LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset

    题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...