Java中注解的类型如下:
Java包含5种常见的注解。
@Target:修改类的方法,类型等;
@Retention:修饰注解的作用时间,比如运行时(source,class,runtime);
@Documented:修饰的注解能够保存到JavaDoc中;
@Inherited:简单理解为:带有该注解的类可以继承父类的注解。
2、RequestMapping的学习
@RequestMapping是一个用来处理请求地址映射的注解,使用的范围是:类或方法。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
主要变量值:Value, name, path, params, headers, consumes, produces, method
下面是源码:
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.Callable;
import org.springframework.core.annotation.AliasFor;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String name() default "";
@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
RequestMapping是一个接口,其中定义的方法
1)name:为本次映射指定一个名词,这个默认的情况是“”。本质就是起名字。
2)Value:请求的路径的实际地址,比如福利金批次的查询路径。
@RequestMapping("/action/act")
@RequestMapping(value = "/function/list",method = RequestMethod.GET)
Value指定的地址可以是URI Template 模式,包含的三种模式:
A) 可以指定为普通的具体值,如上面的value值;
B) 可以指定为含有某变量的一类值(URI Template Patterns with Path Variables)。比如:value="/batch/{varValue}",而varValue可以在后台代码中赋值。
@RequestMapping(value="/funtion/{list}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
Owner owner = ownerService.findOwner(list);
model.addAttribute("list", owner);
return "vaule值";
}
C) 可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);
@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\d\.\d\.\d}.{extension:\.[a-z]}")
public void handle(@PathVariable String version, @PathVariable String extension) {
// ...
}
}
3)path:
源码分析:
@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
从Spring 4.2开始引入了@AliasFor注解,可以实现属性的别名,如value本身并没有特定的含义,而path会更加具体,能见名知义,通俗说可以认为两者在使用中是一样的如:@RequestMapping("/xiaocui")} 与 @RequestMapping(path="/xiaocui")相同。
4)params:
源码解释:
The parameters of the mapped request, narrowing the primary mapping.
映射请求的参数,收窄请求范围。可以限制客户端发送到服务器的请求参数为某些特定值或不为某些值。
直译:就是允许某些值为参数,且其值满足的条件。
//请求的参数必须包含id=215与name不等于xiaocui
@RequestMapping(value = "/paramsTest",params = {"id=215","name!=xiaocui"})
5)headers:
指定请求的属性中必须包含某些特定的headers值。请求的头部,作用域稍微大一些的。
//请求头部信息中必须包含Host=localhost:8088
@RequestMapping(value = "/headersTest",headers = "Host=localhost:8088")
在上述请求过程中,参数必须包含headers,且值为host和port的指定值。另外,在添加参数是,使用的是对象的addAttribute()方法。
6)consumes:(暂定)
指定处理请求的提交内容类型(Content-Type),例如application/json, text/html,收窄请求范围,如果用户发送的请求内容类型不匹配则方法不会响应请求。
//请求内容类型必须为text/html,注意浏览器默认没有指定Content-type
@RequestMapping(value = "/consumesTest",consumes = "text/html")
7)produces:(暂定)
指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回,方法才处理客户端的请求否则会报406错误。
//客户端接收json且编码为utf-8,多数浏览器Accept设置的为*/*,接收任意类型
@RequestMapping(value = "/producesTest",produces="application/json; charset=UTF-8")
8)method:
指定请求的method类型,包含:GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE。
调用的RequestMethod枚举类,源码:
public enum RequestMethod {
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}
3、总结
1)@RequestMapping:用于处理请求地址映射的注解。
2)属性记忆表格:
属性 | 属性 | |||
---|---|---|---|---|
name | 注解名 | headers | 请求头部 | |
value | 路径 | consumes | 提交内容类型 | |
path | Value别名 | produces | 返回内容类型 | |
params | 条件参数 | method | 方法类型 |