@RequestParam注解是作用在controller层上的,它可以将前端发送的请求参数绑定到controller层的方法参数上。根据真是业务需求有时方法参数并不需要传递该参数,则可以通过使用该注解来达到这个目的。
@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";
}
@RequestParam(required = false/true,value = “参数名”,defaultValue = “”) name和value等效这里用value,推荐使用value
value:参数名,前端请求必须使用指定该参数名,不然项目会报错。
required:前端请求该方法是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值。
@ApiOperation(value = "班级列表")
@GetMapping("/class/list")
public Message.DataRespone<UOrganizationClass> organizationClassList(
//不写required 查看其默认是否为true
@RequestParam(value = "organizationId") Integer organizationId,
int schoolId,
@RequestParam(required = true, defaultValue = "") String className,
@RequestParam(required = false, defaultValue = "") String openYear,
PageVo pageVo) {
SSystemUser systemUser = getUserInfo();
//organizationId = getCanCtrlOrganizationId(organizationId);
//如果没有传organizationId就从token中获取organizationId
if (organizationId == null || "".equals(organizationId)) {
organizationId = systemUser.getOrganizationId();
}
int dataLevel = getUserDataLevel();
PageInfo<UOrganizationClass> result = organizationService.listClass(systemUser.getId(), organizationId, schoolId, dataLevel, className, openYear, pageVo.getPageNumber(), pageVo.getPageCount());
return Message.Success.createWithPageInfo(result);
}
1.前端只传一个schoolId参数,查看返回结果。
查看后台控制台:
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'organizationId' for method parameter type Integer is not present]
2022-07-20 13:31:16.363 [http-nio-9989-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - Completed 400 BAD_REQUEST
大概意思是需要带上请求参数organizationId,但是方法参数现在没有。所以得出结论:
required 默认值是true 即 @RequestParam(value = “organizationId”) Integer organizationId 等价 @RequestParam(required = “true”, value = “organizationId”) Integer organizationId
2.前端传递organizationIda参数,查看返回结果。
查看后台控制台:
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'organizationId' for method parameter type Integer is not present]
2022-07-20 13:40:23.836 [http-nio-9989-exec-4] DEBUG o.s.web.servlet.DispatcherServlet - Completed 400 BAD_REQUEST
还是报同样的错误。得出结论:
@RequestParam(value = “organizationId”) Integer organizationId 参数名必须和传递的参数名一致
3.前端调试参数,查看代码参数值。
className没传值默认值defaultValue=“”,className: “”。
@RequestParam(required = false/true,value = “参数名”,defaultValue = “”) name和value等效这里用value,推荐使用value
value:参数名,前端请求必须使用指定该参数名,不然项目会报错。
required:前端请求该方法是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值。