SpringBoot如何优雅接收前端请求参数

这篇具有很好参考价值的文章主要介绍了SpringBoot如何优雅接收前端请求参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

@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进行前置操作例如:文章来源地址https://www.toymoban.com/news/detail-500681.html

### 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如何优雅接收前端请求参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • @PathVariable、@PathParam、@RequestBody接收axios传递的请求参数;后端接收前端传递过来的参数

    目录 一、前言 :Content-Type 类型    (1)、 application/x-www-form-urlencoded 类型 (2)、application/json 类型 二、@PathVariable 二、@PathParam  三、@RequestBody  四、后端发送数据给前端 五、注意事项         请求参数以key-value的形式传输         请求参数以JOSN串的形式传输         ax

    2024年01月18日
    浏览(37)
  • springboot接收前端参数的几种方式

    目录 第一种:直接在方法中指定参数 第二种:使用@requesrParam注解 第三种方法:基于@pathVariable  第四种方法:基于@ResquestBody 在开始之前,我们需要一下准备工作,创建数据库,springboot工程,添加依赖,配置文件,使用的技术有mybatisplus,springboot,maven,mysql。 首先,数据库

    2024年02月07日
    浏览(27)
  • springboot后端接收前端传数组参数方法

    与@RequestBody不同,@RequestParam传递的数组中有多少个值,便排排下来写便是 (注意微操,参数名需为key的名称为@RequestParam括号里的名称,而不是定义的数组名)

    2024年02月16日
    浏览(28)
  • 【SpringBoot系列】接收前端参数的几种方式

    前言 在现代Web开发中,前后端分离的架构已经成为主流。前端负责展示页面和用户交互,而后端则负责处理业务逻辑和数据存储。在这种架构下,前端需要将用户输入的数据发送给后端进行处理。而Spring Boot作为一种快速开发框架,提供了多种方式来接收前端数据。 本文将介

    2024年02月05日
    浏览(34)
  • HTTP四大参数类型及请求参数的方式和如何接收

    请求头参数顾名思义,是存放在请求头中发送给服务器的参数,服务器通过解析请求头获取参数内容。通常会存放本次请求的基本设置,以帮助服务器理解并解析本次请求的body体。 参数形式如: 在我们的SpringBoot中,通过 @RequestHeader 注解可以获取到。 Spring Boot 读取http head

    2024年02月03日
    浏览(30)
  • Spring MVC学习之——如何接收请求传过来的参数

    Springmvc中,接收页面提交的数据是通过方法形参来接收: 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参 springmvc接收的参数都是String类型,所以spirngmvc提供了很多converter(转换器)在特殊情况下需要自定义converter,如对日期数据 直接接收即可

    2024年01月20日
    浏览(36)
  • SpringBoot接口如何正确地接收时间参数

    唠嗑部分 在做Java开发时,肯定会碰到传递时间参数的情况吧,比如用户的出生日期、活动的开始,结束日期等等,这些参数往往是由前端传递过来的,那么在SpringBoot项目中,该如何正确的接收日期参数呢,这便是我们今日所说的内容 首先我们来回顾一下常用的几种传参方式

    2024年02月15日
    浏览(39)
  • @RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)

    目录 一、@RequestMapping  路由映射 二、参数传递 1、传递单个参数 2、传递多个参数 3、传递对象 4、后端参数重命名 5、传递数组 6、传递集合 7、传递JSON 8、获取url中的参数 9、上传图片/文件 指定请求访问的路径 既可以修饰类,又可以修饰方法 @RequestMapping支持Get、Post、Dele

    2024年02月04日
    浏览(38)
  • Springboot开发时,对前端的请求参数,后端用于接受的实体类有没有必要校验为null?

    分析过程:         首先==null对于引用类型是判断这个对象有没有被加载到内存当中。对象的产生是由声明、是实列化、初始化三个过程.         初始化: RequestzbszAdd requestzbszAdd; 也就是声明一个变量         实列化:使用new         初始化:new  RequestzbszAdd()

    2024年02月09日
    浏览(31)
  • 请求响应-json参数的接收

    JSON参数:JSON数据 键名 与形参对象 属性名 (即实体类中的成员变量)相同,定义POJO实体类即可接收参数,需要使用 @RequestBody 标识,将请求体的数据封装到对应的参数中。 前端发送JSON格式的数据,要使用 POST 方法发送请求,因为JSON格式的数据要放在请求体中, 而GET请求方

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包