前端传递参数,后端如何接收

目录

简单参数

传递方式

获取方式一

获取方式二

相关注解

实体参数

数组集合参数

传递方式

相关注解

获取方式一

获取方式二

日期参数

传递方式

相关注解

获取方式

json参数

传递方式

相关注解

获取方式

路径参数

传递方式

相关注解

获取方式

传递多个


简单参数

传递方式

简单参数携带在请求的URL中,例如:

http://localhost:8080/test?page=1&pageSize=10

简单参数放在请求路径的后面,以?连接,以&分隔。

获取方式一

通过HttpServletRequest对象获取

例如:

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(HttpServletRequest request) {
        Integer page = request.getParameter("page");
        Integer pageSize = request.getParameter("pageSize");
        return "page=" + page + "\n" +"pageSize=" + pageSize;
    }
}

测试结果:

当然我们在接收简单参数的时候不会这么做,是比较繁琐的。

获取方式二

我们使用获取方式二来接收简单参数,推荐做法。

例如:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(Integer page, Integer pageSize) {
        return "page=" + page + "\n" +"pageSize=" + pageSize;
    }
}

测试结果:

可以看到测试结果是一样的,但是方便了很多。

相关注解

@RequestParam

作用:参数名映射和判断参数是否必须

属性:name的值代表映射的参数名,required的值代表参数是否必须(默认必须,缺少会报错)

用法:用在接收参数上

例如:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(Integer page, @RequestParam(name = "pageSize", required = false) Integer size) {
        return "page=" + page + "\n" +"pageSize=" + size;
    }
}

 测试结果:

@RequestParam注解不经常用,因为传递的参数名和接收的参数名一般都是要保持一致的,如果有特殊需求的话再使用。

实体参数

实体参数可以看作是对简单参数的补充:

那如果简单参数有很多怎么办呢?一个一个地接收吗?

可以一个一个地接收,但是有更优雅的做法。

例如以下请求:

http://localhost:8080/test?gender=1&age=18&page=1&pageSize=10

直接接收参数的代码:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(Integer gender, Integer age, Integer page, Integer pageSize) {
        return "gender=" + gender + "\n" +
               "age=" + age + "\n" +
               "page=" + page + "\n" +
               "pageSize=" + pageSize;
    }
}

测试结果:

推荐做法是将所有的参数封装成对象,用封装的对象去接收。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@Data
@NoArgsConstructor
public class PageBean {
    private Integer gender;
    private Integer age;
    private Integer page;
    private Integer pageSize;
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(PageBean pageSize) {
        return pageSize.toString();
    }
}

测试结果:

需要注意的是这里并没有用到@RequestBody注解,该注解是在接收json格式的数据时,用在实体参数上解析数据用的。

数组集合参数

传递方式

和简单参数一样,数组集合参数携带在请求路径的后面。但是数组集合参数的名称都是一样的,通过定义数组或者集合参数来接收。例如:

http://localhost:8080/test?id=1&id=2&id=3

相关注解

@RequestParam

用法:用在集合参数上,数组参数不需要。

获取方式一

定义数组参数来接收,注意参数名保持一致。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(Integer[] id) {
        return Arrays.toString(id);
    }
}

测试结果:

获取方式二

定义集合参数来接收,注意参数名保持一致。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(@RequestParam List<Integer> id) {
        return id.toString();
    }
}

测试结果:

通常是使用集合来接收,因为集合操作起来更方便。 

日期参数

传递方式

通过请求路径传递,例如:

http://localhost:8080/test?time=2023-12-16 09:30:45

相关注解

@DateTimeFormat

作用:完成日期格式转换

属性:pattern的值用来指定日期格式

用法:用在LocalDateTime类型的参数上

获取方式

LocalDateTime类型的参数来接收

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time) {
        return time.toString();
    }
}

测试结果:

json参数

传递方式

携带在请求体中

json格式的数据:

{
    "username":"艾伦",
    "password":"123abc"
}

相关注解

@RequestBody

作用:解析json格式的数据

用法:用在实体参数上

获取方式

先封装实体类,用于接收参数。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@Data
@NoArgsConstructor
public class UserLogin {
    private String username;
    private String password;
}
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @PostMapping("/test")
    public String demo(@RequestBody UserLogin userLogin) {
        return userLogin.toString();
    }
}

测试结果: 

路径参数

传递方式

通过请求路径传递,例如:

http://localhost:8080/test/1

和直接携带在请求路径上不同,路径参数是作为请求路径的一部分。

相关注解

@PathVariable

作用:获取路径参数

用法:用在接收参数上

获取方式

注意接收请求路径的写法,路径参数必须写在请求路径中,用{...}表示并标明参数名。例如:

@GetMapping("/test/{id}")

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test/{id}")
    public String demo(@PathVariable Integer id) {
        return "id=" + id;
    }
}

测试结果:

传递多个

路径参数可以同时传递多个,以逗号分隔,用集合接收。例如:

http://localhost:8080/test/1,2,3

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class DemoController {

    @GetMapping("/test/{ids}")
    public String demo(@PathVariable List<Integer> ids) {
        return ids.toString();
    }
}

测试结果:

猜你喜欢

转载自blog.csdn.net/qq_74312711/article/details/135035067
今日推荐