springboot的前后端数据传递

目录

1.通过query方式-?

1. 1使用 @RequestParam

什么时候使用 @RequestParam?

1.2. 使用 @RequestParam 接收多个参数

1.3. 使用 @ModelAttribute

什么时候不需要使用 @ModelAttribute

1.4 总结

2.通过路径参数

2.1 使用 @PathVariable 接收路径参数

示例

2.2 默认路径参数名称匹配

2.3 总结


1.通过query方式-?

http:localhost:8080/XXX?id=3

在Spring Boot中,前端通过query参数的方式传递数据到后端时,后端可以通过以下几种方式来接收数据:

1. 1使用 @RequestParam

如果你需要获取单个或多个查询参数,可以使用 @RequestParam 注解。

@RestController
@RequestMapping("/api")
public class YourController {

    @GetMapping("/getData")
    public String getData(@RequestParam String param1, @RequestParam(required = false) Integer param2) {
        // 处理接收到的参数
        return "Received param1: " + param1 + ", param2: " + param2;
    }
}

在上面的例子中,param1param2 是前端传递的查询参数。

在Spring Boot中,@RequestParam 并不是必须标注的。如果省略 @RequestParam 注解,Spring Boot 也能够通过方法参数的名称匹配查询参数,但需要满足以下条件:

  1. 必须开启 spring.mvc.parameter-naming-strategy 在配置文件中设置 spring.mvc.parameter-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES,这样可以将请求参数的命名策略从驼峰命名转换为下划线命名。

  2. 参数名称必须与查询参数名称匹配: 如果方法参数名称与查询参数名称完全一致,Spring Boot 能够自动绑定参数。

@RestController
@RequestMapping("/api")
public class YourController {

    @GetMapping("/getData")
    public String getData(String param1, Integer param2) {
        // 处理接收到的参数
        return "Received param1: " + param1 + ", param2: " + param2;
    }
}

例如,前端可以通过以下URL传递参数:

/api/getData?param1=value1&param2=123

在这种情况下,param1param2 会自动匹配到方法中的 param1param2 参数,无需使用 @RequestParam 注解。

什么时候使用 @RequestParam

  • 参数名称不匹配:当你需要将查询参数映射到与其名称不匹配的变量时。
  • 需要默认值:当参数可能是可选的,并且你希望为未提供的参数指定一个默认值时。
  • 需要参数校验:当你需要使用校验注解(如 @Valid)时。
@GetMapping("/getData")
public String getData(@RequestParam(name = "param1", required = false, defaultValue = "defaultVal") String customParamName) {
    return "Received param1: " + customParamName;
}

1.2. 使用 @RequestParam 接收多个参数

如果有多个参数,可以将参数封装到 Map 中:

@GetMapping("/getData")
public String getData(@RequestParam Map<String, String> params) {
    // 处理接收到的所有参数
    return "Received parameters: " + params.toString();
}

这种方式可以动态获取传递的所有查询参数。

1.3. 使用 @ModelAttribute

当前端传递的数据较多且字段较复杂时,可以使用 @ModelAttribute 将查询参数映射到一个对象中。

public class QueryParams {
    private String param1;
    private Integer param2;

    // Getters and Setters
}

@RestController
@RequestMapping("/api")
public class YourController {

    @GetMapping("/getData")
    public String getData(@ModelAttribute QueryParams queryParams) {
        // 处理接收到的参数
        return "Received param1: " + queryParams.getParam1() + ", param2: " + queryParams.getParam2();
    }
}

前端仍然可以使用相同的查询字符串:

/api/getData?param1=value1&param2=123

在Spring Boot中,@ModelAttribute 注解并不是必须要标注的。当使用一个对象作为控制器方法的参数,并且请求中的参数名称与对象的属性名称匹配时,Spring Boot 会自动将请求参数绑定到该对象的属性上,即使不显式地标注 @ModelAttribute

什么时候不需要使用 @ModelAttribute

如果你有一个简单的对象,并且请求中的参数名称与对象的属性名称一一对应,那么可以省略 @ModelAttribute 注解,Spring Boot 会自动进行绑定

1.4 总结

  • 如果是简单的几个参数,推荐使用 @RequestParam 直接接收。
  • 如果参数较多,可以使用 @ModelAttribute 将参数封装为对象接收。

2.通过路径参数

在Spring Boot 中,前后端可以通过路径参数传递数据。路径参数(Path Variables)是 URL 中的一部分,通常用于标识资源。Spring Boot 使用 @PathVariable 注解来接收路径参数。

2.1 使用 @PathVariable 接收路径参数

你可以在控制器方法中通过 @PathVariable 注解来接收路径参数,并将其绑定到方法的参数中。

示例

假设你有一个 RESTful API 需要根据用户 ID 获取用户信息,URL 结构如下

/api/user/{id}

可以在控制器中定义如下方法:

@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/user/{id}")
    public String getUserById(@PathVariable("id") Long userId) {
        // 根据 userId 获取用户信息
        return "User ID: " + userId;
    }
}

在这个例子中,{id} 是路径参数,@PathVariable("id") 用来接收这个参数并将其绑定到 userId 变量。

/api/user/123

Spring Boot 会将 123 作为路径参数,并传递给 userId

2.2 默认路径参数名称匹配

如果路径参数名称与方法参数名称一致,可以省略 @PathVariable 注解中的参数名:

@GetMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {
    return "User ID: " + id;
}

2.3 多个路径参数

如果你有多个路径参数,可以这样定义:

@GetMapping("/user/{userId}/order/{orderId}")
public String getUserOrder(@PathVariable Long userId, @PathVariable Long orderId) {
    return "User ID: " + userId + ", Order ID: " + orderId;
}

前端请求的 URL 可以是:

/api/user/123/order/456

Spring Boot 会将 123 绑定到 userId,将 456 绑定到 orderId

2.3 总结

  • 路径参数:用于标识特定资源,通常出现在 URL 中的 {} 中。
  • @PathVariable 注解:用于接收路径参数,支持默认名称匹配,也可以显式指定参数名。
  • 多个路径参数:可以在一个请求中接收多个路径参数,Spring Boot 会按顺序绑定。

路径参数在 RESTful API 中非常常见,适用于表示资源的层次结构或唯一标识符。

在Spring Boot 中,@PathVariable 注解是必须的,不能省略。路径参数是通过 @PathVariable 明确指定的,没有这个注解,Spring Boot 无法将 URL 中的路径变量自动绑定到方法参数上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值