我们再使用mvc开发controller传参时经常看到这几个注解@RequestParam、@QueryParam、@PathParam和@PathVariable都可以实现,那她们主要有什么区别呢?
- @PathVariable是路径传参
类似url/{version}{id}这样的
我们看PathVariable源码,他有三个参数
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PathVariable {
@AliasFor("name")
String value() default "";
@AliasFor("value")
String name() default "";
boolean required() default true;
}
- RequestParam和QueryParam以及@PathParam都是采用键值对的方式取值,方法名后面加 “?” 开始,多个参数用 “&” 拼接,格式为:
/getInfos?pageNum=1&pageSize=10&var2=111
PathParam 源码只有value是必填,(@PathParam(value = “var2”) String var2)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface PathParam {
String value();
}
@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";
}
@Target({ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface QueryParam {
String value();
}
这两个注解用法,QueryParam只有一个属性,必填,RequestParam有三个参数不必填(@RequestParam(name = “var3”,required = true,defaultValue = “1”) String var3)
以上就是4个注解的区别啦.