• Spring 注解之@RequestParam和@GetMapping


          @RequestParam用来处理Content-Type 为 application/x-www-form-urlencoded编码的内容,将请求参数名映射到方法参数名。在Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型。接下来我们结合测试用例看一下@RequestParam注解的三个主要参数。

    @RestController
    @RequestMapping("/user")
    public class UserController {
        private static Logger logger = LoggerFactory.getLogger(UserController.class);
    
        @GetMapping("/viewUserByBean")
        public User viewUserByBean(User user) {
            logger.info("@GetMapping中请求参数 ownerId = " + user.getId());
            user.setName(user.getName() + " --> lucy");
            return user;
        }
    
        @RequestMapping(value ="/viewUserByEachEle",method = RequestMethod.GET)
        public User viewUserByEachEle(@RequestParam(value = "id", required = false, defaultValue = "1") Long ownerId,
                @RequestParam("userName") String name) {
            logger.info("请求参数 ownerId = " + ownerId);
            User user = new User();
            user.setId(ownerId);
            user.setName(name + " --> lucy");
            return user;
        }
    
        @GetMapping("/testRequestParam")
        public String testRequestParam(@RequestParam(value = "id", required = false, defaultValue = "1") Long ownerId,
                @RequestParam("userName") String name) {
            logger.info("testRequestParam, userName: " + name + ", id: "
                    + ownerId);
            return "SUCCESS";
        }
        
    }
    // 定义User Bean
    public class User implements Serializable {
        
        private static final long serialVersionUID = 7797704227043955944L;
       
        private Long id;
        private String name;
       
        // omit getter、setter and toString
    }

         使用postman模拟ajax请求,URL为http://localhost:8080/user/viewUserByEachEle?userName=licy&id=1002:

    @RequestParam

           @RequestParam可以接受简单类型的属性,也可以接受对象类型(如viewUserByBean方法)。创建一个实体类对象作为参数承载体,Spring MVC会根据参数名称自动将参数绑定到实体类对象的属性上,viewUserByBean就是这么处理的。

          value:String 类型,请求参数名,如viewUserByEachEle 方法中的userName表示请求参数名,它的值将被绑定到方法参数name。

          required:是否必须,默认值为true,表示请求参数中必须包含对应的参数,否则,将抛出400错误码;异常信息是org.springframework.web.bind.MissingServletRequestParameterException,提示“Required String parameter 'userName' is not present”。

          defaultValue:String 类型,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties['java.vm.version']}”。

          其实如果不使用@RequestParam,Spring MVC也会将request的parameter自动绑定到method的parameter中,使用@RequestParam只不过是对parameter进行配置和对URL更精确化的配置。例如,在请求参数名和方法参数名相同时,则可以省略@RequestParam注解。

    @GetMapping 

           @GetMapping是一个组合注解,等价于@RequestMapping(method = RequestMethod.GET),它将HTTP Get请求映射到特定的处理方法上。例如,在测试用例中,使用@GetMapping("/testRequestParam")代替了@RequestMapping(value ="/viewUserByEachEle",method = RequestMethod.GET),显然,这可以精简我们的代码。

     

  • 相关阅读:
    Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件
    公司官网建站笔记(六):域名进行公安备案并将备案号显示在网页底部
    公网官网建站笔记(五):域名工信部备案完整流程并解析公网访问
    Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、编译和使用
    看起来是线程池的BUG,但是我认为是源码设计不合理。
    2022年最主流的5大OKR管理系统
    工程项目管理系统P6(Primavera Project Planner)怎么样?
    项目工期延后有哪些补救措施?
    OKR实施的关键步骤有哪些?需要哪些辅助工具?
    研发过程管理工具云效平台怎么样?
  • 原文地址:https://www.cnblogs.com/east7/p/10807668.html
Copyright © 2020-2023  润新知