SpringBoot优雅接收前端请求参数的详细过程

 更新时间:2023年06月26日 15:45:49   作者:新垣不结衣  
这篇文章主要介绍了SpringBoot如何优雅接收前端请求参数,我们可以通过@RequestParm注解去绑定请求中的参数,将(查询参数或者form表单数据)绑定到controller的方法参数中,本文结合示例代码给大家讲解的非常详细,需要的朋友可以参考下

@RequestParm

我们可以通过@RequestParm注解去绑定请求中的参数,将(查询参数或者form表单数据)绑定到controller的方法参数中,通俗点说就是,我们可以在get请求和post请求中使用改注解,get请求中会从查询参数中获取参数,post请求会从form表单或者查询参数中获取参数

  • 默认情况下,方法参数上使用该注解说明这个参数是必传的,但是我们可以通过required = false来设置是否必传,或者通过defaultValue设置默认值。
  • 如果类型不是Sting类型的话,会自动进行转换
  • 可以将参数类型声明为list,同一个参数名解析多个参数值

1.使用Get请求

    /**
     *GET http://localhost:8080/api/person/getPerson?id=1
     */
    @GetMapping("/getPerson")
    public String getPerson(@RequestParam(value = "id",required = false,defaultValue = "2") Integer id) {
        log.info("id:{}", id);
        return "";
    }

2.使用Post请求

    /**
     * POST http://localhost:8080/api/person/postPerson
     * Content-Type: application/x-www-form-urlencoded
     *
     * id=1
     */
    @PostMapping("/postPerson")
    public String postPerson(@RequestParam("id") String id) {
        log.info("id:{}", id);
        return "";
    }

3.使用Map接收

    /**
     *POST http://localhost:8080/api/person/postPersonMap
     * Content-Type: application/x-www-form-urlencoded
     *
     * id=1
     */
    @PostMapping("/postPersonMap")
    public String postPersonMap(@RequestParam HashMap<String,String> param) {
        log.info("param:{}",param.toString());
        return "";
    }

4.使用List接收

    /**
     *可以通过两种方式传递list
     * 第一种传递到param中:
     * POST http://localhost:8080/api/person/postPersonList?param=1,2,3,4
     *
     * 第二种传递到form表单中:
     * POST http://localhost:8080/api/person/postPersonList
     * Content-Type: application/x-www-form-urlencoded
     *
     * param=1,2,3,4,5
     */
    @PostMapping("/postPersonList")
    public String postPersonList(@RequestParam List<String> param) {
        log.info("param:{}",param);
        return "";
    }

5.什么都不加

​ 如果不加的话,前端可以不传id。默认:get请求通过param传递,post请求通过form表单传递

    /**
     * GET http://localhost:8080/api/person/getPerson?id=1
     */
    @GetMapping("/getPersonById")
    public String getPersonById(Integer id) {
        log.info("id:{}", id);
        return "";
    }

@RequestBody

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);

如果参数未传的话,引用类型默认是null,基本类型为默认值

注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。

### test postPersonByJson
POST http://localhost:8080/api/person/postPersonByJson
Content-Type: application/json
{
  "id": 1,
  "name": "tom",
  "age": 12,
  "ADDRESS": "beijing"
}

默认json的key和属性名称必须要匹配的,并且大小写敏感

如果有别名的话可以使用@JsonAlias注解或者使用@JsonProperty注解如下:

    /**
     * 地址
     */
    @JsonAlias(value = {"ADDRESS"})
    private String adress;
    /**
     * 地址
     */
   @JsonProperty("ADDRESS")
    private String adress;

服务端接收如下:

    @PostMapping("/postPersonByJson")
    public Person postPersonByJson(@RequestBody Person person) {
        log.info("person:{}", person);
        return person;
    }

HttpEntity

HttpEntity 和@RequestBody使用相同,多了一个header

### test httpEntity
POST http://localhost:8080/api/person/accounts
Content-Type: application/json
{
  "id": 1,
  "name": "tom",
  "age": 12,
  "ADDRESS": "beijing"
}
    /**
     * HttpEntity 和@RequestBody使用相同,多了一个header
     *
     * @param entity
     */
    @PostMapping("/accounts")
    public void handle(HttpEntity<Person> entity) {
        log.info("请求头部为:{},请求体为:{}", entity.getHeaders(), entity.getBody());
    }

@RequestHeader

@RequestHeader 主要用于接收前端header中的参数,可以获取指定的header属性,也可以通过Map统一接收请求头中的参数

### test header
GET http://localhost:8080/api/person/getPersonHeader
Accept-Encoding: deflate
Keep-Alive: 11
### test headerByMap
GET http://localhost:8080/api/person/getPersonHeaderByMap
Accept-Encoding: deflate
Keep-Alive: 11
    /**
     * 接收header参数
     */
    @GetMapping("/getPersonHeader")
    public void getPersonHeader(@RequestHeader("Accept-Encoding") String encoding,
                                @RequestHeader("Keep-Alive") long keepAlive) {
        log.info("Accept-Encoding:{},Keep-Alive:{}", encoding, keepAlive);
    }
    /**
     * map接收header参数
     * 使用map接收key值会变成小写
     */
    @GetMapping("/getPersonHeaderByMap")
    public void getPersonHeader(@RequestHeader Map<String, String> param) {
        param.forEach((key, value) -> {
            log.info("key:{},value:{}", key, value);
        });
        log.info("Accept-Encoding:{},Keep-Alive:{}", param.get("accept-encoding"), param.get("keep-alive"));
    }

@PathVariable

使用@PathVariable注解可以获取url中的参数,也可以使用正则表达式提取url中的多个变量

### test PathVariable
GET http://localhost:8080/api/person/1
### test PathVariable  regular expression
GET http://localhost:8080/api/person/express/spring-web-3.0.5.jar
    /**
     * 获取url中的参数
     */
    @GetMapping("/{id}")
    public void getPersonById(@PathVariable String id) {
        log.info("id:{}", id);
    }
    /**
     * 通过正则表达式获取url中name,version,ext等信息
     */
    @GetMapping("/express/{name:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{ext:\\.[a-z]+}")
    public void handle(@PathVariable String name, @PathVariable String version, @PathVariable String ext) {
        log.info("name:{},version:{},ext:{}", name, version, ext);
    }

@ModelAttribute

@ModelAttribute可以作用在方法上和方法参数上,

标记在方法的参数上,会将客户端传递过来的参数按名称注入到指定对象中

标记在方法上,会在每一个@RequestMapping标注的方法前执行。

###test modelAttribute
POST http://localhost:8080/api/person/postPersonByModel/123
Content-Type: application/x-www-form-urlencoded
name=tom&age=14&address=北京
###test getModelAttribute
GET http://localhost:8080/api/person/getPersonByModel/456?name=tom&age=14&address=北京
    @PostMapping("/postPersonByModel/{id}")
    public void postPersonByModel(@ModelAttribute Person person) {
        log.info("person:{}", person);
    }
    @GetMapping("/getPersonByModel/{id}")
    public void getPersonByModel(@ModelAttribute Person person) {
        log.info("person:{}", person);
    }

或者将@ModelAttribute注解放到方法上,如果有公共参数需要进行处理,可以使用@ModelAttribute进行前置操作例如:

### testModelAttribute
POST http://localhost:8080/api/person/testModelAttribute
Content-Type: application/x-www-form-urlencoded
token: 123
name=tom&age=14&address=北京
    @ModelAttribute
    public void userInfo(ModelMap modelMap, HttpServletRequest request) {
        log.info("执行modelAttribute方法");
        //模拟通过token获取userId的过程
        String id = request.getHeader("token").toString();
        modelMap.addAttribute("userId", id);
    }
    @PostMapping("/testModelAttribute")
    public void testModelAttribute(@ModelAttribute("userId") String userId, Person person) {
        log.info("userId:{}", userId);
    }

到此这篇关于SpringBoot如何优雅接收前端请求参数的文章就介绍到这了,更多相关SpringBoot接收前端请求参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java基本数据类型与封装类型详解(int和Integer区别)

    Java基本数据类型与封装类型详解(int和Integer区别)

    这篇文章主要介绍了Java基本数据类型与封装类型详解(int和Integer区别) ,需要的朋友可以参考下
    2017-02-02
  • Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

    Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

    这篇文章主要介绍了Java中日期时间转换的多种方法,包括将Date转换为LocalDateTime、LocalDate等,以及将时间戳转换为LocalDateTime,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • Spring Boot集成MinIO对象存储服务器操作步骤

    Spring Boot集成MinIO对象存储服务器操作步骤

    通过Spring Boot集成MinIO,你可以在应用中方便地进行文件的存储和管理,本文给大家分享Spring Boot集成MinIO对象存储服务器详细操作步骤,感兴趣的朋友一起看看吧
    2024-01-01
  • SpringBoot使用Jackson详解

    SpringBoot使用Jackson详解

    Spring Boot中使用Jackson处理JavaBean序列化为JSON格式,常用框架包括Jackson、Fastjson和Gson,Jackson是Spring Boot默认的JSON处理库,常用注解如@JsonProperty、@JsonIgnore、@JsonFormat等,用于自定义序列化和反序列化行为
    2025-02-02
  • Spring Security入门demo案例

    Spring Security入门demo案例

    Spring Security是一个高度自定义的安全框架,本文主要介绍了Spring Security入门,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java实现规则几何图形的绘制与周长面积计算详解

    Java实现规则几何图形的绘制与周长面积计算详解

    随着计算机的发展,人们对图形的计算要求会越来越高。在各行各业中的计算人员会对图形的计算要有便利的要求,规则几何图形问题求解程序应运而生!本文将用Java编写一个程序,可以实现规则几何图形的绘制与周长面积计算,感兴趣的可以了解一下
    2022-07-07
  • Spring MVC4.1服务器端推送实现过程解析

    Spring MVC4.1服务器端推送实现过程解析

    这篇文章主要介绍了Spring MVC4.1服务器端推送实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java中详细解析Map接口

    Java中详细解析Map接口

    这篇文章主要介绍了Java8 中 Map 接口的新方法,本文通过代码实例给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Spring bean 加载执行顺序实例解析

    Spring bean 加载执行顺序实例解析

    这篇文章主要介绍了Spring bean 加载执行顺序实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • JDK8新特性-java.util.function-Function接口使用

    JDK8新特性-java.util.function-Function接口使用

    这篇文章主要介绍了JDK8新特性-java.util.function-Function接口使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论