【前端学java】SpringBootWeb极速入门-请求参数解析(02)

简介: 【8月更文挑战第12天】SpringBootWeb极速入门-请求参数解析(02)

这一章节,我们将使用spring boot实现常见的请求参数处理。

首先,我们需要创建一个spring boot web项目,项目创建请参考往前文章。

简单参数

简单参数通常是指基本数据类型(如String、int、double等)的值,如get请求中的query参数。

我们实现一个简单的get请求:http://localhost:8080/simpleParam?name=张三&age=18 ,这个接口返回值为“hello get 请求!”

原始方式

在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获取。(了解即可)
代码如下:

package com.shixiaoshi.controller;

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

import javax.servlet.http.HttpServletRequest;

@RestController
public class RequestController {
   
   
    // 原始方式
    @RequestMapping("/simpleParam")
    public  String simpleParam(HttpServletRequest request){
   
   
        // 获取请求参数
        String name = request.getParameter("name");
        String ageStr = request.getParameter("age");
        int age = Integer.parseInt(ageStr);

        System.out.println("name:"+name + "age:" + age);

        return "hello get 请求!";
    }
}

上述代码是一个控制器类,用于处理HTTP请求,使用了java的注解写法。

  • @RestController:这个注解标记类为一个REST控制器。当一个类被注解为@RestController时,Spring会为该类自动配置一个requestMapping的处理器。
  • @RequestMapping("/simpleParam"):这个注解映射HTTP请求到simpleParam方法。/simpleParam是一个URL路径,当用户发送GET请求到该路径时,该方法会被调用。

我们在postman中请求这个接口测试一下:
GIF 2023-11-10 14-06-33.gif
这种方式非常繁琐,还要手动进行类型转换,所以不建议。

Spring Boot方式

这种方式参数名与形参名相同,定义形参即可接受参数

package com.shixiaoshi.controller;

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

@RestController
public class RequestController {
   
   
    // 原始方式
    @RequestMapping("/simpleParam")
    // 基于spring boot方式
    public String simpleParam(String name,Integer age){
   
   
        System.out.println("name:"+name + "age:" + age);
        return "请求完成!";
    }
}

GIF 2023-11-10 14-15-47.gif
对于简单参数,get请求和post请求的代码是一样的
GIF 2023-11-10 14-21-20.gif
如图,我们将get请求改为了post,程序一样是可以正常打印的。

形参名称更改

使用spring boot的形式,请求参数名和方法的形参名称必须相同
image.png
如果想更改形参名称,可以使用@RequestParam完成映射

@RestController
public class RequestController {
   
   
    // 原始方式
    @RequestMapping("/simpleParam")
    // 基于spring boot方式
    public String simpleParam(@RequestParam(name = "name") String userName, Integer age){
   
   
        System.out.println("name:"+userName+ "age:" + age);
        return "请求完成!";
    }
}

GIF 2023-11-10 14-29-26.gif
@RequestParam 是Spring MVC框架中的一个注解,用于将HTTP请求参数绑定到方法的参数上。它通常用于处理GET和POST请求。
其语法如下

@RequestParam(name = "name",required = true)

required是其第二个参数,默认值为required = true,意味着,接口请求时必须传name属性,否则报错
GIF 2023-11-10 14-35-29.gif
如图,我们删除name参数,请求就会报错。

实体参数

简单实体参数

请求参数名与形参对象属性名相同,定义POJO接受接口。

POJO是指一个普通的Java对象,通常用于表示实体对象数据模型。POJO通常包含一组属性和相应的getter和setter方法,用于访问和修改这些属性的值。

我们依旧以 http://localhost:8080/simpleParam?name=张三&age=18 为例
定义一个User类及需要解析的參數
image.png
引入即可
image.png

JSON参数

日常开发中,JSON参数是最常见的一种POST请求形式之一。我们来实现如下接口:
GIF 2023-11-14 10-01-41.gif
我们使用 @RequestBody注解来声明请求类型,使用一个实体类User来接收body请求体。image.png
User实体类

package com.shixiaoshi.pojo;

public class User {
   
   
    private String name;
    private Integer age;

    private Address address;

    public String getName() {
   
   
        return name;
    }

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

    public Integer getAge() {
   
   
        return age;
    }

    public void setAge(Integer age) {
   
   
        this.age = age;
    }

    public Address getAddress() {
   
   
        return address;
    }

    public void setAddress(Address address) {
   
   
        this.address = address;
    }

    @Override
    public String toString() {
   
   
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

在这个类中,我们通过将数据成员(name、age和address)定义为私有(private),并只提供公共的getter和setter方法,使得User类的内部状态对外部是不可见的。这是一种封装性的体现,有助于保护数据不被外部随意修改。toString的重写,便于在RequestController类中打印该类时,输出更有意义的内容。
Address实体类

package com.shixiaoshi.pojo;

public class Address {
   
   
    private String province;
    private String city;

    public String getProvince() {
   
   
        return province;
    }

    public void setProvince(String province) {
   
   
        this.province = province;
    }

    public String getCity() {
   
   
        return city;
    }

    public void setCity(String city) {
   
   
        this.city = city;
    }

    @Override
    public String toString() {
   
   
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}
相关文章
|
4月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
396 0
|
5月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
1319 0
|
5月前
|
Java
Java的CAS机制深度解析
CAS(Compare-And-Swap)是并发编程中的原子操作,用于实现多线程环境下的无锁数据同步。它通过比较内存值与预期值,决定是否更新值,从而避免锁的使用。CAS广泛应用于Java的原子类和并发包中,如AtomicInteger和ConcurrentHashMap,提升了并发性能。尽管CAS具有高性能、无死锁等优点,但也存在ABA问题、循环开销大及仅支持单变量原子操作等缺点。合理使用CAS,结合实际场景选择同步机制,能有效提升程序性能。
|
5月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
486 0
|
5月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
508 100
|
4月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
5月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
4月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
5月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
763 1
|
5月前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
728 3

推荐镜像

更多
  • DNS