• @RequestParam注解的正确使用方式


    前言

    @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";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    二、@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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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
    
    • 1
    • 2

    大概意思是需要带上请求参数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
    
    • 1
    • 2

    还是报同样的错误。得出结论:

    @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,如果没有传该参数,就使用默认值。

  • 相关阅读:
    SpringCloud源码学习笔记3——Nacos服务注册源码分析
    Guitar Pro 8win10最新版吉他学习 / 打谱 / 创作
    15、JAVA入门——封装
    (十一)React Ant Design Pro + .Net5 WebApi:后端环境搭建-IdentityServer4(三)持久化
    期末前端web大作业:餐饮美食网站设计与实现——餐厅响应式网站制作html+css+javascript+jquery+bootstarp
    如何与ChatGPT愉快地聊天
    Java环境准备——JDK下载和安装、IDEA下载和安装
    Transformer和attention资料
    从零开始搭建Electron项目之运行例程
    pandas库--DataFrame常用操作
  • 原文地址:https://blog.csdn.net/m0_49692893/article/details/125887718