SpringBoot处理url中的参数的注解

本文详细介绍如何使用@PathVariable和@RequestParam注解处理URL中的参数,包括单个和多个参数的获取方式,以及如何设置默认值。同时,介绍了@GetMapping和@PostMapping组合注解的用法,帮助开发者更高效地处理HTTP请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.介绍几种如何处理url中的参数的注解

@PathVaribale 获取url中的数据

@RequestParam 获取请求参数的值

@GetMapping 组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写

(1)PathVaribale 获取url中的数据

看一个例子,如果我们需要获取Url=localhost:8080/hello/id中的id值,实现代码如下:

1 @RestController
2 public class HelloController {
3     @RequestMapping(value="/hello/{id}/{name}",method= RequestMethod.GET)
4     public String sayHello(@PathVariable("id") Integer id,@PathVariable("name") String name){
5         return "id:"+id+" name:"+name;
6     }
7 }

在浏览器中 输入地址: localhost:8080/hello/81 然后会在html页面上打印出:

id:81

同样,如果我们需要在url有多个参数需要获取,则如下代码所示来做就可以了。

1 @RestController
2 public class HelloController {
3     @RequestMapping(value="/hello/{id}/{name}",method= RequestMethod.GET)
4     public String sayHello(@PathVariable("id") Integer id,@PathVariable("name") String name){
5         return "id:"+id+" name:"+name;
6     }
7 }

在浏览器中输入地址: localhost:8080/hello/100/helloworld 然后会在html页面上打印出:

id:100 name:helloworld

以上,通过 @PathVariable 注解来获取URL中的参数时的前提条件是我们知道url的格式时怎么样的。
  只有知道url的格式,我们才能在指定的方法上通过相同的格式获取相应位置的参数值。
  一般情况下,url的格式为: localhost:8080/hello?id=98 ,这种情况下该如何来获取其id值呢,这就需要借助于 @RequestParam 来完成了

2.@RequestParam 获取请求参数的值

例如:

@RestController
public class HelloController {
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(@RequestParam("id") Integer id){
        return "id:"+id;
    }
}

在浏览器中输入地址: localhost:8080/hello?id=1000 ,可以看到如下的结果:

id:1000

当我们在浏览器中输入地址: localhost:8080/hello?id ,即不输入id的具体值,此时返回的结果为null。具体测试结果如下:

id:null

但是,当我们在浏览器中输入地址: localhost:8080/hello ,即不输入id参数,则会报如下错误:

whitelable Error Page错误

@RequestParam 注解给我们提供了这种解决方案,即允许用户不输入id时,使用默认值,具体代码如下:

1 @RestController
2 public class HelloController {
3     @RequestMapping(value="/hello",method= RequestMethod.GET)
4     //required=false 表示url中可以不穿入id参数,此时就使用默认参数
5     public String sayHello(@RequestParam(value="id",required = false,defaultValue = "1") Integer id){
6         return "id:"+id;
7     }
8 }

如果在url中有多个参数,即类似于 localhost:8080/hello?id=98&&name=helloworld 这样的url,同样可以这样来处理。具体代码如下:

1 @RestController
2 public class HelloController {
3     @RequestMapping(value="/hello",method= RequestMethod.GET)
4     public String sayHello(@RequestParam("id") Integer id,@RequestParam("name") String name){
5         return "id:"+id+ " name:"+name;
6     }
7 }

在浏览器中的测试结果如下: localhost:8080/hello?id=1000&name=helloworld 地址,就会显示下面的内容:
id:1000 name:helloworld

3.@GetMapping 组合注解

@GetMapping 是一个组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写。该注解将HTTP Get 映射到 特定的处理方法上。
即可以使用 @GetMapping(value = “/hello”) 来代替 @RequestMapping(value=”/hello”,method= RequestMethod.GET) 。即可以让我们精简代码。

1 @RestController
2 public class HelloController {
3 //@RequestMapping(value="/hello",method= RequestMethod.GET)
4 @GetMapping(value = "/hello")
5 //required=false 表示url中可以不穿入id参数,此时就使用默认参数
6 public String sayHello(@RequestParam(value="id",required = false,defaultValue = "1") Integer id){
7     return "id:"+id;
8        }
9   }

4.PostMapping组合注解:

方法同GetMapping

参考:http://blog.csdn.net/u010412719/article/details/69788227

### 如何在 Spring Boot 中通过注解传递参数 在 Spring Boot 中,可以通过多种注解实现控制器方法的参数绑定。对于 HTTP 请求中的不同部分(路径变量、请求体、查询参数等),有不同的注解处理。 #### 路径变量 (@PathVariable) 当 URL 模板中包含占位符时,可以使用 `@PathVariable` 来获取这些占位符对应的值: ```java @GetMapping("/greeting/{name}") public String greeting(@PathVariable String name) { return "Hello, " + name; } ``` 此代码片段展示了如何接收来自 URL 的名称并返回问候消息[^2]。 #### 查询参数 (@RequestParam) 为了读取 GET 请求后面的查询字符串参数,应该采用 `@RequestParam` 注解: ```java @GetMapping("/search") public String searchUsers(@RequestParam(value="query", required=false, defaultValue="World") String query) { return "Query: " + query; } ``` 这里定义了一个可选的查询参数,默认情况下如果没有提供则设置为 “World”。这有助于防止因缺少必要参数而导致错误的发生[^5]。 #### 表单数据 (@ModelAttribute 和 @RequestBody) 针对 POST 请求提交的数据,有两种主要的方式取决于客户端发送的内容类型: - 如果是表单编码形式,则利用 `@ModelAttribute` 或者直接指定参数名; ```java @PostMapping("/form") public String handleFormSubmission(User user) { // User 是一个 POJO 类 return "User submitted!"; } ``` - 对于 JSON/XML 等非表单格式的数据流,需借助 `@RequestBody` 将其映射成 Java 对象。 ```java @PostMapping("/json") public ResponseEntity<User> createUser(@Valid @RequestBody User user){ userRepository.save(user); return new ResponseEntity<>(user, HttpStatus.CREATED); } ``` 上述例子说明了如何解析不同类型的身体负载,并将其转换为目标对象实例以便进一步操作[^3]。 #### SQL 参数 (@Param) MyBatis 映射器接口内的方法签名里也可以见到 `@Param` 这样的注释,用来给命名参数赋值,在执行数据库查询的时候非常有用: ```java public interface UserRepository extends BaseMapper<User> { /** * 根据用户名查找用户记录. */ List<User> selectByUsername(@Param("username") String username); } ``` 注意:当不适用 `@Param` 注解而尝试访问 `${}` 形式的属性将会引发异常;相反地,`#{}` 总是可以安全使用的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值