使用SpringMVC进行开发可以有多种使用方式但是在项目中我们经常使用的是注解形式的开发.

1、用于声明的注解@Controller

@Controller不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。有了这些注解还是不够的,我们需要告诉我们的程序应该要去哪里找我们的Controller,这也就是告诉他要扫描我们的那些包:

<!--方式一-->
<bean class="com.host.app.web.controller.MyController"/>
<!--方式二-->
< context:component-scan base-package = "com.host.app.web" />//路径写到controller的上一层(扫描包详解见下面浅析)

在Spring的开发中@Service、@Repository分别用来告诉Spring框架他们所标记的类是用作service层dao层的,他们都是@Component的一个特列,可以使得注解的还以更加清晰。与@Controller注解相关的一个注解是@ResController这个注解是一个混合注解相当于是@Controller+@ResponseBody注解,使用了他的class可以看做这个class下面所有的方法都标记了@ResponseBody注解,这样的话写入的数据会直接进入响应视图。

2、用于匹配请求路径与具体处理方法的@RequestMapping

如同@Component注解中有更详细的注解@Controller、@Service、@Repository一样,@RequestMapping注解也有相关的便捷类型的其他注解:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping。

(1)@RequestMapping注解可以用来匹配所有类型的请求,所以他会在class的级别上还是会使用他的

(2)、使用不同的匹配规则可是匹配不同的请求路径,同时我们还可以利用@PathVariable的注解实现ResultFul 的编程风格。如果我们使用@PathVariable匹配过来的数据不是String类型的话Spring的框架会给我们完成自动的类型转换。

(3)、有关请求路径Spring框架还支持使用占位符加配置文件实现的动态路径配置

3、用于数据接收的注解@RequestBody、@RequestParam

@RequestBody注解主要是用来接收请求体中的数据在我们常见的post、get请求类型中只有post类型的请求才有请求体所以get请求类型的时候是不能够使用@RequestBody的,在一个请求中我们可以同时使用这两个注解但是@RequestBody注解只可以使用一个而@RequestParam注解却可以使用多个。在使用@RequestBody注解的时候应该注意的是Json形式的数据与Class实体中间的一个匹配问题,@RequestParam注解主要接受的是请求路径中键值对形式的参数。这样键值对形式的参数我们也可以用来处理复杂的数据类型例如:集合、数组等

 @RequestMapping("/hello1")public String hello1(@RequestBody User user, @RequestParam(required = false) List<String> arrays){String arrysMesg ="";for (String item:arrays){arrysMesg = arrysMesg+item;}return user.toString()+arrysMesg;}

如果方法的参数上使用了@RequestParma注解那么这个参数就就是必须要传的,如果路径中没有这个参数,请求就会报错。不过这个性质我们也可以通过required = false的属性类注释关闭掉,这时候就变成了参数中如果有的话就自动匹配如果参数中没有的话请求的路径也不会报错。

有关前端请求的Json以及后端用实体接受情况的匹配:

在使用@RequestBody来进行数据接收的时候可以通过与Json管的注解实现Json数据与Class实体类型数据的一个智能匹配,@JsonAlias注解可以给一个属性起多个类型的别名,@JsonProperty属性则是可以摆脱对seter、getter函数的依赖。如果要是忽略这两个注解的情况下,SpringMVC默认是对大小写敏感的,在实际的项目操作过程中发现如果Json数据中key的首个字母是不能够使用大写的,这是因为还存在驼峰命名的匹配问题。当我们的Json数据中有多个相同的key时,根据SpringMVC转换的机理,后面的是会覆盖前面的。

public class User {@JsonAlias({"id","userid"})private int userId;private String userName;private String userAddress;
}public class Users {@JsonProperty("id")private int userId;@JsonProperty("name")private String userName;@Overridepublic String toString() {return "Users{" +"userId=" + userId +", userName='" + userName + '\'' +'}';}
}

4、Handler Methods会用到的其他的注解

5、@Controller注解的增强——全局异常处理数据绑定及初始化

@Controller注解是告诉框架我们这个Class是用来控制器的一个Bean,他的作用也仅限于此。而@ControllerAdvice注解就是在@Controller的基础上对这个类进行一个加强,从常理来说我们也可以知道这个加强加强的一定是最常用到的一些功能——全局异常处理(@ExceptionHandler)、全局数据绑定(@ModelAttribute)、全局数据预处理(@InitBinder)。上面提到的这三种包含的增强类型注解,在使用的时候也可以直接可和@Controller注解搭配使用。@ControllerAdvice注解与@ResponseBody直接结合就是混合注解@ResControllerAdvice注解。

亲手测试了这个功能真的是感觉,这个功能蛮强大,感触最深的就是里面关于异常的全局处理以及@ModelAttribute 的全局返回数据,现在对于数据的初始化的感触并不是很大,但是从框架中初始化相关参数中携带的方法来看其应该是有很强的功能,但是目前的工作中还没有见到详细的应用场景,所以这里就也不做过多探讨。

SpringMVC开发常用注解相关推荐

  1. SpringMVC的常用注解(三)

    白发戴花君莫笑,岁月从不败美人. 愿,像你我一如既往地好看. 上一章简单介绍了SpringMVC的'两个蝴蝶飞,你好'的简单开发(二),如果没有看过,请观看上一章. 一. SpringMVC的常用注解 ...

  2. SpringMVC的常用注解

    SpringMVC的常用注解 1.@Controller @Controller注解在类上,表明这个类是Spring MVC 作为Controller(控制器)的角色.这样就可以将其 声明为Sprin ...

  3. spring+springmvc+springboot 常用注解

    springmvc: @ControllerAdvice:注解内部使用@ExceptionHandler.@InitBinder.@ModelAttribute注解的方法应用到所有的 @Request ...

  4. SpringMVC相关常用注解

    @Controller: @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象 @RequestMapping: RequestMappin ...

  5. springMVC的常用注解有哪些?

    1.@Controller @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象.分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否 ...

  6. springmvc的常用注解以及用法

    .@Controller @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象. 分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否 ...

  7. java开发常用注解汇总

    lombok整理 @Data 注解在类上:提供类所有属性的 getting 和 setting 方法,此外还提供了equals.canEqual.hashCode.toString 方法 @Sette ...

  8. 二、SpringMVC的常用注解——1-@Controller

    1-@Controller 转载于:https://www.cnblogs.com/ljiwej/p/7300210.html

  9. 5.概念(maven,ssm,springMvc,spring,自定义注解,二级缓存,范式,事务,mysql,线程池,map,hashmap,redis,饿汉,懒汉)

    maven是啥: 1.Maven是一个项目管理和综合工具.Maven提供了开发人员构建一个完整的生命周期框架. 创建-导入jar报–编写配置文件-实现业务功能-测试-发布上线. 2.开发团队可以自动完 ...

最新文章

  1. 机器学习——逻辑回归算法
  2. Java类集-set
  3. 一种基于邻域的聚类算法
  4. eclipse简单使用
  5. null 和{}的那点事
  6. mysql skip-grant-tables my.cnf_skip-grant-tables:修改mysql密码
  7. Solidworks二次开发 Addin模版使用
  8. 三款Linux文件传输工具简单介绍
  9. 我写了款依赖检查的插件
  10. 微信红包封面热潮的背后思考
  11. web前端学习路线图
  12. 为什么很多公司都在招测试开发?
  13. 工作经验分享:Spark调优【优化后性能提升1200%】
  14. fairyGUI的学习记录2
  15. HC-05-USB蓝牙模块绑定唯一的蓝牙模块
  16. windows下安装cygwin+swoole教程
  17. 从程序中学习UKF-SLAM(一)
  18. 杨永智:创业者需具备的六大基因 五大攻略(下)
  19. ByteBuffer常用方法与分析
  20. ❤️2021 全国大学生数学建模❤️完整B 题思路分析

热门文章

  1. 硬盘被格式化了怎么恢复数据?
  2. python数据清洗实战入门笔记(五)数据统计
  3. python对象和类区别_python面向对象(类与对象)
  4. python输出1到100整数_python第一个代码程序打印1到100整数
  5. FIFA 19 complete player dataset(FIFA 19完整球员数据集)
  6. 软文写作的流程有哪些?分享这五个方法,让零基础的你快速上手
  7. 【学习笔记】网页出现白屏可能的原因与优化方法
  8. mysql查询数据库所有表名字
  9. 数据库备份的三种方式
  10. vue2.0.js基础开发使用心得(结合实际项目对数据的增删改查)