SpringBoot如何获取Get请求参数详解

目录
  • 前言
  • 一、直接在请求路径中
  • 二、参数跟在 ? 号后面
    • 1,获取参数的基本方法
    • 2、使用 map 来接收参数
    • 3、接收一个集合
    • 4、通过对象接收参数
  • 总结

前言

利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数。下面演示 Controller 如何接收以 GET 方式传递过来的参数。

一、直接在请求路径中

(1)、假设请求地址是如下这种 RESTful 风格,Springboot 这个参数值直接放在路径里面

http://localhost:8080/hello/Springboot

(2)、Controller 定义,如下:

@RestController
public class HelloController {
    @GetMapping("/hello/{name}")
    public String hello(@PathVariable("name") String name){

        return "你好," + name + " !";
    }
}

二、参数跟在 ? 号后面

1,获取参数的基本方法

(1)假设请求地址是如下这种传统方式,参数跟在问号后面:

http://localhost:8080/hello?name=Springboot

(2)Controller 定义如下所示:

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(@RequestParam("name") String name){

        return "你好," + name + " !";
    }
}

可以把在注解 @RequestParam 添加  required = false 设置参数为非必输项
可以把在注解 @RequestParam 添加  defaultValue 参数 设置默认值。

2、使用 map 来接收参数

(1)Controller 还可以直接使用 map 来接收所有的请求参数:

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(@RequestParam Map<String, Object> map){

        return "图书: " + map.get("name") +  " 的作者为: " + map.get("author");
    }
}

(2)、结果如下所示:

3、接收一个集合

(1)、Controller 定义接收 数组或者List的方法,如下:

@RestController
public class HelloController {

    @GetMapping("/array")
    public String array(@RequestParam("name") String[] names){

        System.out.println("我是数组接收的参数:" + Arrays.toString(names));

        return "我是数组接收的参数:" + Arrays.toString(names);
    }

    @GetMapping("/list")
    public String list(@RequestParam("name")List<String> names){
        System.out.println("我是List接收的参数:" + names);
        return "我是List接收的参数:" + names.toString();
    }

}

(2)、测试结果

4、通过对象接收参数

如果一个 get 请求的参数太多,我们构造一个对象来简化参数的接收方式。

(1)、定义一个基本对象Book 和 Controller

public class Book {
    private String name;
    private String author;
    private Double price;
   // 省略 getter setter 方法
}
@RestController
public class BookController {
    @GetMapping("/book")
    public Book book(Book book){
        System.out.println("接收到的参数为:" + book);
        return  book;
    }
}

(2)、基本用法:

(3)、构造多个对象来接收参数,代码如下所示:

public class User {
    private String username;
    private String password;
    // 省略 getter setter 方法
}
@RestController
public class BookController {
    @GetMapping("/book")
    public Book book(Book book, User user){
        System.out.println("接收到的参数为:" + book);
        System.out.println("接收到的参数为:" + user);
        return  book;
    }
}

访问:

输出结果:

(4)、指定前缀。

如果在多个对象参数的方法中,对象之间存在相同的 属性时 可以结合  @InitBinder 指定前缀的方式处理。如下所示,Book 对象和 Author 对象中都存在 name 属性。

除了在 Controller 里单独定义预处理方法外,我们还可以通过 @ControllerAdvice 结合 @InitBinder 来定义全局的参数预处理方法,方便各个 Controller 使用

public class Book {
    private String name;
    private String author;
}

public class Author {
    private String name;
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Author{" +
                "name='" + name + '\'' +
                '}';
    }
}
@RestController
public class BookController {
    @GetMapping("/book")
    public Book book(@ModelAttribute("b") Book book, @ModelAttribute("a") Author author){
        System.out.println("接收到的参数为:" + book);
        System.out.println("接收到的参数为:" + author);
        return  book;
    }

    // 添加  InitBinder 指定 前缀 b
    @InitBinder("b")
    private void initBinderB(WebDataBinder binder) {
        binder.setFieldDefaultPrefix("b.");
    }

    // 添加  InitBinder 指定 前缀 a
    @InitBinder("a")
    private void initBinderA(WebDataBinder binder) {
        binder.setFieldDefaultPrefix("a.");
    }
}

访问:

结果:

总结

到此这篇关于SpringBoot如何获取Get请求参数的文章就介绍到这了,更多相关SpringBoot获取Get请求参数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 解决Springboot get请求是参数过长的情况

    问题原因 Springboot get请求是参数过长抛出异常:Request header is too large 的问题 错误描述 java.lang.IllegalArgumentException: Request header is too large 解决方案 请求头超过了tomcat的限值.本来post请求是没有参数大小限制,但是服务器有自己的默认大小. 设置服务器大小: 1.普通tomcat 在server.xml中 <Connector connectionTimeout=&quo

  • SpringBoot常见get/post请求参数处理、参数注解校验及参数自定义注解校验详解

    目录 springboot常见httpget,post请求参数处理 PathVaribale获取url路径的数据 RequestParam获取请求参数的值 注意 GET参数校验 POSTJSON参数校验 自定义注解校验 总结 spring boot 常见http get ,post请求参数处理 在定义一个Rest接口时通常会利用GET.POST.PUT.DELETE来实现数据的增删改查:这几种方式有的需要传递参数,后台开发人员必须对接收到的参数进行参数验证来确保程序的健壮性 GET一般用于查询数

  • SpringBoot用实体接收Get请求传递过来的多个参数的两种方式

    目录 一.Controller层不带任何注解接收参数 二.Controller层通过@ModelAttribute接收参数 最近项目中Controller层查询接口需要通过实体来接受前端传过来的多个参数(Get请求),这个问题困扰了我很久,之前在第二家公司的时候,就因为我后端是Get请求,并且是通过实体去接收前端参数的,导致我当天上线搞到半夜没搞好,这次又遇到,势必解决它. 一年前,通过查看大量的坑爹文章,发现网上没有一篇有效的,这次通过阿里主管的协助,成功的通过实体接收到了Get请求传递过来的

  • SpringBoot构建Restful service完成Get和Post请求

    一个基本的RESTfule service最进场向外提供的请求Method就是Get和Post. 在Get中,常用的都会在请求上带上参数,或者是路径参数.响应Json. 在Post中,常用的会提交form data或者json data作为参数,响应Json. 1. Get请求,url传参,返回json. 先准备一个请求后,响应的对象. package com.example.demo; public class Echo { private final long id; private fin

  • SpringBoot RestTemplate GET POST请求的实例讲解

    一)RestTemplate简介 RestTemplate是HTTP客户端库提供了一个更高水平的API.主要用于Rest服务调用. RestTemplate方法: 方法组 描述 getForObject 通过GET检索表示形式. getForEntity ResponseEntity通过使用GET 检索(即状态,标头和正文). headForHeaders 通过使用HEAD检索资源的所有标头. postForLocation 通过使用POST创建新资源,并Location从响应中返回标头. po

  • SpringBoot中获取profile的方法详解

    目录 spring boot与profile 静态获取方式 autowire ProfileConfig spring boot与profile spring boot 的项目中不再使用xml的方式进行配置,并且,它还遵循着约定大于配置. 静态获取方式 静态工具类获取当前项目的profile环境. import org.springframework.beans.BeansException; import org.springframework.context.ApplicationConte

  • 学习SpringMVC——如何获取请求参数详解

    @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView)!它(@ModelAttribute)!没错,仅注解这块,spring mvc就为你打开了五彩斑斓的世界.来来来,不要兴(mi)奋(hu),坐下来,我们好好聊聊这么些个注解兄弟们~~~(wait, 都没有听过? 好,来,你坐前排,就你!)  一.spring mvc如何匹配请求路径--"请求路径哪家

  • SpringMVC解析post请求参数详解

    目录 SpringMVC 一,概述 二.原理: 1.创建form表单 css代码 2.准备Student类 3.创建启动类 4,创建数据库,表 使用JDBC把得到的数据入库 5.创建StudentController类 6.测试 总结 SpringMVC 一,概述 作用是接受服务器请求并做出响应,是spring的后续产品,使用注解@RestController和@RequestMapping MVC设计模式: M是model模型,用来封装数据 V是view视图,用来展示数据 C是control控

  • springboot获取URL请求参数的多种方式

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @param username * @param password * @return */ @RequestMapping("/addUser1") public String addUser1(String username,String password) { System.out.pri

  • Java Spring MVC获取请求数据详解操作

    目录 1. 获得请求参数 2. 获得基本类型参数 3. 获得POJO类型参数 4. 获得数组类型参数 5. 获得集合类型参数 6. 请求数据乱码问题 7. 参数绑定注解 @requestParam 8. 获得Restful风格的参数 9. 自定义类型转换器 1.定义转换器类实现Converter接口 2.在配置文件中声明转换器 3.在<annotation-driven>中引用转换器 10. 获得Servlet相关API 11. 获得请求头 11.1 @RequestHeader 11.2 @

  • springboot中不能获取post请求参数的解决方法

    问题描述 最近在做微信小程序,用的spring boot做后端,突然发现客户端发送post请求的时候服务端接收不到参数.问题简化之后如下: 微信小程序端: 在页面放一个按钮进行测试 <!--index.wxml--> <view class="container"> <button catchtap='testpost'>点击进行测试</button> </view> 绑定一个函数发送post请求 //index.js //获

  • Vue + Element-ui的下拉框el-select获取额外参数详解

    直接上代码吧~ <el-table-column label="用户类型" width="180"> <template slot-scope="scope"> <el-select v-model="scope.row.roleID" placeholder="请选择" @change="changeRole($event,scope)"> <

  • SpringBoot拦截器如何获取http请求参数

    1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景,这时你就需要获取 HTTP 请求的参数或者请求body,一般思路有两种,一种就是自定义个AOP去拦截目标方法,第二种就是使用拦截器.整体比较来说,使用拦截器更灵活些,因为每个接口的请求参数定义不同,使用AOP很难细粒度的获取到变量参数,本文主线是采用拦截器来获取HTTP请求. 1.2.定义拦截器获

  • SpringBoot内置tomcat启动原理详解

    前言 不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springboot是怎么启动的呢? 内置tomcat 开发阶段对我们来说使用内置的tomcat是非常够用了,当然也可以使用jetty. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo

随机推荐