前言

@RequestParam注解是作用在controller层上的,它可以将前端发送的请求参数绑定到controller层的方法参数上。根据真是业务需求有时方法参数并不需要传递该参数,则可以通过使用该注解来达到这个目的。

一、@RequestParam注解源码

@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正确使用方式

1.@RequestParam用法

@RequestParam(required = false/true,value = “参数名”,defaultValue = “”) name和value等效这里用value,推荐使用value

value:参数名,前端请求必须使用指定该参数名,不然项目会报错。

required:前端请求该方法是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。

defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值。

2.controller层代码

@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);
}

3.postman测试

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.前端传递多个参数,查看返回结果。
在这里插入图片描述

3.前端调试参数,查看代码参数值。
在这里插入图片描述
在这里插入图片描述
className没传值默认值defaultValue=“”,className: “”。

总结

@RequestParam(required = false/true,value = “参数名”,defaultValue = “”) name和value等效这里用value,推荐使用value

value:参数名,前端请求必须使用指定该参数名,不然项目会报错。

required:前端请求该方法是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。

defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐