开发者

SpringBoot请求参数传递与接收示例详解

目录
  • I. 基础参数传递
    • i.查询参数(Query Parameters)
    • ii.路径参数(Path Variables)
    • iii.混合
  • II. 对象绑定
    • i.自动绑定到实体类
    • ii.嵌套对象绑定
  • III. jsON 请求体(POST/PUT/PATCH)
    • IV、数组/集合参数
      • i.查询参数数组
      • ii.JSON 数组
    • V、特殊参数处理
      • i.日期格式化
      • ii.可选参数
      • iii.请求头参数
    • VI、文件上传
      • VII、验证参数(需spring-boot-starter-validation)
        • VIII、注解总结

          I. 基础参数传递

          i.查询参数(Query Parameters)

          请求示例:GET /user?name=John&age=25

          @GetMapping("/user")
          public String getUser(
              @RequestParam String name, 
              @RequestParam(defaultValue = "20") int age) {
              return "Name: " + name + ", Age: " + age;
          }

          ii.路径参数(Path Variables)

          请求示例:GET /product/123

          @GetMapping("/product/{id}")
          public String getProduct(@PathVariable Long id) {
              return "Product ID: " + id;
          }

          iii.混合

          请求示例:GET /order/456?status=shipped

          @GetMapping("/order/{orderId}")
          public String getOrder(
              @PathVariable String orderId,
              @RequestParam String status) {
              return "Order " + orderId + " is " + status;
          }

          II. 对象绑定

          i.自动绑定到实体类

          请求示例:GET /search?keyword=spring&page=2&size=10

          public class SearchParams {
              private String keyword;
              private int page = 1;
             www.devze.com private int size = 20;
              // getters/setters方法
          }
          ​
          @GetMapping("/search")
          public String search(SearchParams params) {
              return "Searching: " + params.getKeyword() 
                     + " Page: " + params.getPage();
          }

          ii.嵌套对象绑定

          请求示例:GET /user?name=Alice&address.city=Beijing&address.zip=100001

          public class UserQuery {
              private String name;
              private Address address;
              // getters/setters
          }
          ​
          public class Address {
              private String city;
              private String zip;
          }
          ​
          @GetMapping("/user")
          public String findUser(UserQuery query) {
              return query.getName() + " in " + query.getAddress().getCity();
          }

          III. JSON 请求体(POST/PUT/PATCH)

          请求示例:POST /users Body: {"name":"Mike","email":"mike@example.com"}

          // User实体
          public class User {
              private String id;
              private String name;
              private String email;
              // getters/setters
          }
          ​
          @PostMapping("/users")
          public User createUser(@RequestBody User user) {
              user.setId(UUID.randomUUID().toString());
              return user; // 自动转为JSON
          }

          IV、数组/集合参数

          i.查询参数数组

          请求示例:GET /products?ids=101,102,103

          @GetMapping("/products")
          public String getProducts(@RequestParam List<Long> ids) {
              return "IDs: " + ids.toString();
          }

          ii.JSON 数组

          请求示例:POST /BATch Body: [{"name":"Item1"},{"name":"Item2"}]

          @PostMapping("/batch")
          public String batchCreate(@RequestBody List<Item> items) {
              return "Created " + items.size() + " items";
          }

          V、特殊参数处理

          i.日期格式化

          请求示例:GET /events?date=2023-05-15

          @GetMapping("/events")
          public String getEvents(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {
              return "Events on: " + date.toString();
          }

          ii.可选参数

          @GetMappwww.devze.coming("/optional")
          public String optionalParam(@RequestParam(required = false) String filter) {
              return filter != null ? "Filter: " + filter : "No filter";
          }

          iii.请求头参数

          @GetMapping("/auth")
          public String auth(@RequestHeader("Authorization") String token) {
              return "Token: " + token.substring(0, 5) + "...";
          }

          VI、文件上传

          表单请求:multipart/form-data

          @PostMapping("/upload")
          public String uploadFile(@RequestParam("file") MultipartFile file) {
              return "File received: " + file.getOriginalFilename() 
                     + " Size: " + file.getSize();
          }

          VII、验证参数(需spring-boot-starter-validation)

          POST /register

          public class Registration {
              @NotBlank
              private 编程客栈String username;
              @Email
              private String email;
              @Min(RnpOZSl18)
              private int age;
          }
          @PostMapping("/register")
          public ResponseEntity<?> register(@Valid @RequestBody Registration form) {
              // 自动验证参数
              return ResponseEntity.ok("Valid");
          }
          // 全局异常处理
          @ControllerAdvice
          public class ValidationHandler {
              @ResponseStatus(HttpStatus.BAD_REQUEST)
              @ExceptionHandler(MethodArgumentNotValidException.class)
              public Map<String, String> handleValidation(MethodArgumentNotValidExcepRnpOZSltion ex) {
                  Map<String, String> errors = new HashMap<>();
                  ex.getBindingResult().getFieldErrors().forEach(error -> 
                      errors.put(error.getField(), error.getDefaultMessage()));
                  return errors;
              }
          }

          VIII、注解总结

          注解用途示例场景
          @RequestParam获取查询参数?name=value
          @PathVariable获取路径参数/users/{id}
          @RequestBody获取JSON/XML请求体POST/PUT请求
          @ModelAttribute绑定表单数据html表单提交
          @RequestHeader获取请求头值Authorization
          @DateTimeFormat日期参数格式化?date=2023-01-01
          @RequestPart文件上传multipart/form-data
          @Valid触发参数验证配合JSR-303验证注解

          到此这篇关于SpringBoot请求参数传递与接收示例整理的文章就介绍到这了,更多相关SpringBoot请求参数内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

          0

          上一篇:

          下一篇:

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          最新开发

          开发排行榜