SpringMVC基于注解的controller
1、@Controller 框架能自动识别到这就是一个Controller
2、@RequestMapping 映射Request请求与处理器
(1)@RequestMapping可以出现在类级别上,也可以出现在方法上,如果出现在类级别上,那请求的url为 “类级别上的@RequestMapping+方法级别上的@RequestMapping,否则直接去方法上的@RequestMapping”,类级别上的@RequestMapping不是必须的,方法上的@RequestMapping必须存在。
(2)@RequestMapping的属性:
Value: Value=”映射的url路径”
Method: Method=RequestMethod.POST/GET
Params: params = “args=args_value值” 或者 params = “args”
headers属性:@RequestMapping (value= "testHeaders" , headers={ "host=localhost" , "Accept" })
(3) “请求路径为value 或者参数为args或者参数为args且参数值为args_value的请求 调用Methods的方法。”
3.@RequestParam 将参数绑定到方法参数
(1)规则:@RequestParam只可以标注在方法上
(2)目的:增加方法的灵活性,不想使用默认的数据绑定方式时
(3) 如果方法没有传递规定的参数进来,框架就会自动注入null值。@RequestParam的属性Required值默认为true,要解决这种null异常的问题,可以定义@RequestParam = false
4.@PathVariable 将url Template里的参数绑定到方法参数
(1)@PathVariable是url模板,需要和@RequestMapping配合使用。
(2)Url模板中的参数名和方法参数名的绑定规则和@RequestParam类似
(3)@PathVariable和@RequestParam区别:url的格式不一样
@PathVariable: /my//user/zhangsan/18
@RequestParam: /my//user?nickname=zhangsan&age=18
5.@RequestBody 将请求的正文绑定到方法参数
(1)若有请求体,则必须提供请求体的类型和长度,这些信息是写在请求头里的,即 Content-Type和 Content-Length
(2)@RequestBody的作用是将请求中的请求提的内容绑定到方法参数上,SparingMVC通过HttpMessageConverter来完成从请求正文到对象的类型转换。【AnnotationMethodHandlerAdapter默认注册了一些 HttpMessageConverters)】
6.@ResponseBody(将处理完请求后返回的对象绑定到响应正文)
(1)SparingMVC通过HttpMessageConverter将处理完的请求返回的对象序列化成字符串
(2)通常和@Valid连在一起使用,表示对请求连接中发过来的实体进行验证。通常的方法定义上 比如@PutMapping()括号中添加(consumes = arrayOf(MediaType.APPLICATION_JSON_UTF8_VALUE))表示对这个RequestBody格式的要求。如果在@Valid的时候 验证不通过不是正确的媒体类型,则客户端和服务器的交互将会报媒体类型异常的错误。
7. @ModelAttribute
(1)作用:可以作为视图渲染日工更多的模型数据,而不需要再处理请求的方法里添加ModleMap或Model类型的参数。
(2)使用规则:可以标注在方法上或者 属性上。
(3)被@ModelAttribute注解,表示:返回的对象以“返回的数据类型”为key放入到模型数据中,这里key的默认值是:返回的数据类型的首字母小写的结果。
也可以自定义一个key的名字:@ModelAttribute(“keyName”),则返回的对象将会绑定到名为keyName的key上。
(4)如果想要获取模型中的数据,将@ModelAttribute作用在方法的参数上,此时想正确取出值,则需要借助@SessionAttributes
8.@SessionAttributes
(1)@SessionAttributes和@ModelAttribute相似,区别:@SessionAttributes是将数据存放于Session或者从session中取出数据。
(2)使用:@SessionAttributes指定名称或者指定类型 来表明哪些数据通过session进行管理。
名称:@SessionAttributes(“valueName”)
类型:@SessionAttributes(type = User.class)
::将要返回的数据对象添加到属性名为valueName或者类型为User.class的属性上。
(3)规则:只能声明在类上
9.@Component 表示当组件无法归类的时候,可以使用这个注解,把这个类纳入到spring容器中。
10.相似注解的对比:
(1)@PutMapping和@PatchMapping
@PutMapping:只要是关于修改信息的所有操作,都由它来映射。
@PatchMapping:在Spring3.0之后才提出的一个集create和update与一身的映射注解。
但一般情况下 还是@PutMapping用的多一点,因为是比较明确的指定了这个请求所使用方法的性质。
(2)@PathVariable和@PathParam
两者都是使用在动态绑定请求中的参数和方法中参数之间关系时使用的注解。
但是:@ParamVariable 使用这个注解动态绑定的参数 是必须显示在url路径中的,同MockMVC测试的时候,这些参数也是以值的方式传到uil请求中。
而 @PathParam 绑定的参数不用显示在url中,在测试的过程中,这些使用@PathParam绑定的参数,以下列形式出现:(kotlin代码)
val request = post(“/roles/$uid”).param(参数名,参数值)……
有多少个被@PathParam注解的参数 这里就可以连续写多少个,但是一般情况下都不会很多,要不然请求提太乱 ,容易出错。