美文网首页
SpringBoot | 跟随官网的脚步 | 115: Hand

SpringBoot | 跟随官网的脚步 | 115: Hand

作者: 码农学禅 | 来源:发表于2018-09-11 20:57 被阅读0次

目标

今天学习如何处理URL里的参数。

要点

@RequestParam

代码

1. 先看一个最简单的例子,处理一个参数

代码

import org.springframework.boot.*;

import org.springframework.boot.autoconfigure.*;

import org.springframework.web.bind.annotation.*;

@RestController

@EnableAutoConfiguration

public class example {

    @RequestMapping("/greeting")  //change in 115

    public String greeting(@RequestParam(name="user_name", required=false, defaultValue="World") String userName) { // change in 115

        return "Hi "+userName+"!"; //change in 115

    }

    public static void main(String args[]) throws Exception{

        SpringApplication.run(example.class, args);

    }   

}

运行结果

1. URL = http://localhost:8080/greeting?user_name=lishu

     结果:Hi lishu!

2. URL = http://localhost:8080/greeting

     结果:Hi World!

说明

1. 110里用的是@RequestMapping,本文用的是@GetMapping,网上查了资料后了解到:@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。

用@RequestMapping也可以,我理解@RequestMapping更广泛,无论GET和POST都会map到这个函数。

2. 关于和name有关的三个标识符:name, user_name和userName

name="user_name"中的name:和required, defaultValue一样,都是@RequestMapping参数的“域名”

user_name:URL中的<name, value>对的name

userName: Java程序中的变量名

2. required和defaultValue

(1)如果把required改成true,defaultValue去掉,即改成@RequestParam(name="user_name", required=false),那么URL里不包含name参数时会返回错误。

(2)如果把required改成true,defaultValue保留,即改成@RequestParam(name="user_name", required=false, defaultValue="World"),那么URL里不包含name参数时会使用defaultValue。

(3)如果把required是false,defaultValue去掉,即改成@RequestParam(name="user_name", required=false),那么URL里不包含name参数时会把null作为缺省值。即http://localhost:8080/greeting会返回Hi null!

(4)如果不用@RequestParam, 直接用public String greeting(String userName),效果和@RequestParam(name="userName", required=false)是一样的。注意,这里Spring会认为URL中的name和Java程序中的变量名是一样的。

3. 多个参数和数组

(1)多个参数,例如增加一个参数city,代码如下:

public String greeting(@RequestParam(name="user_name", required=false) String userName, @RequestParam(name="city", required=false) String city)

测试URL: http://localhost:8080/greeting?user_name=lishu&city=shanghai

(2)数组,例如userName是数组,另有一个参数id, 代码如下:

public String greeting(

    @RequestParam(name="user_name", required = false) String[] userNames, Long id){

        String result = "";

        if(userNames != null){

            for(int i=0;i<userNames.length;i++)

            result += userNames[i] + "#";

        }

      }

      result += id;

      return result;

}

测试URL:http://localhost:8080/greeting?user_name=ada&id=8&user_name=lishu

返回结果:ada#lishu#8 

参考

1. 官网 | Serving Web Content with Spring MVC

2.@RequestMapping 和 @GetMapping @PostMapping 区别

3. SpringMVC的@RequestParam的解释

相关文章

网友评论

      本文标题:SpringBoot | 跟随官网的脚步 | 115: Hand

      本文链接:https://www.haomeiwen.com/subject/ellpgftx.html