SpringMvc两种映射规则
1.spring mvc 默认参数映射规则:名字一致 自动映射
2.spring mvc自定义映射规则:可以通过注解来实现=> @RequestParam
传递基本数据类型
@RequestParam,POST和GET均支持
注解定义
@Target({ElementType.PARAMETER}) // 只能作用于参数上
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
// 定义参数名称,默认和名字一致
@AliasFor("name")
String value() default "";
// 定义参数名称,默认和名字一致
@AliasFor("value")
String name() default "";
// 默认必填,一旦加上该注解,前台必须传递此参数
boolean required() default true;
// 定义默认值
String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}
关于@AliasFor注解说明:标识2个属性作用一致
在Spring的众多注解中,经常会发现很多注解的不同属性起着相同的作用,比如@RequestParam 的value属性和name属性,这就需要做一些基本的限制,比如value和path的值不能冲突,比如任意设置value或者设置path属性的值,都能够通过另一个属性来获取值等等。为了统一处理这些情况,Spring创建了@AliasFor标签。
@RequestMapping注解中也有应用。
注解使用示例
@RequestMapping("demo")
public String demo(Model model
// 走默认装配规则,参数名称和名字一致,选传
,String name
// 参数名称和名字默认一直,必传参数,不传报错
,@RequestParam String name0
// 通过value属性定义名称,必传参数,不传报错
,@RequestParam(value = "name1") String name1
// 通过name属性定义,非必传参数
,@RequestParam(name = "name2",required = false) String name2
// 通过value属性定义,必传参数,有默认值,可以不传自动赋值
,@RequestParam(value = "name3",defaultValue = "t3") String name3
// 自定义参数名字,不必加name或者value属性,必传
,@RequestParam("name444") String name4
){
System.out.println("name:"+name);
System.out.println("name0:"+name0);
System.out.println("name1:"+name1);
System.out.println("name2:"+name2);
System.out.println("name3:"+name3);
System.out.println("name4:"+name4);
return "hello";
}
请求连接:
/demo?name=t&name0=t0&name1=t1&name2=t2&name444=t44
结果展示
必传参数name1,不传会报400错误,如下:
@PathVariable,POST和GET均支持
注:和@RequestParam注解使用相同的地方简述
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PathVariable {
// 定义参数名称,默认和名字一致
@AliasFor("name")
String value() default "";
// 定义参数名称,默认和名字一致
@AliasFor("value")
String name() default "";
// 默认必填,一旦加上该注解,前台必须传递此参数
boolean requir