Java 新手如何使用Spring MVC 中的查询字符串和查询参数

news2025/1/13 15:42:45

文章目录

    • 什么是查询字符串和查询参数?
    • Spring MVC中的查询参数
    • 处理可选参数
    • 处理多个值
    • 处理查询参数的默认值
    • 处理查询字符串
    • 示例:创建一个RESTful服务
    • 结论

在这里插入图片描述

🎉欢迎来到Java学习路线专栏~Java 新手如何使用Spring MVC 中的查询字符串和查询参数


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:Java学习路线
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

Spring MVC是Java中最受欢迎的Web应用程序框架之一,用于构建灵活且高效的Web应用程序。在构建Web应用程序时,处理查询字符串和查询参数是一个常见的任务,尤其是在开发RESTful服务时。本文将介绍如何在Spring MVC中使用查询字符串和查询参数,以及如何处理它们,特别是对于Java初学者。

在这里插入图片描述

什么是查询字符串和查询参数?

在Web开发中,查询字符串是URL中的一部分,通常跟在问号(?)后面,用于传递数据给服务器。查询参数则是查询字符串中的参数名和参数值的键值对。例如,考虑以下URL:

https://example.com/products?category=electronics&price=100

在这个URL中,categoryprice是查询参数的名称,分别对应electronics100是它们的值。

Spring MVC中的查询参数

Spring MVC提供了强大的功能来处理查询参数。在Spring MVC中,我们通常使用@RequestParam注解来访问查询参数。下面是如何在Spring MVC控制器方法中使用@RequestParam注解:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class ProductController {

    @RequestMapping("/products")
    public String getProducts(
        @RequestParam String category,
        @RequestParam int price) {
        // 处理查询参数
        // ...
        return "products";
    }
}

在上面的示例中,@RequestParam注解用于声明categoryprice查询参数,Spring MVC会自动将它们的值绑定到方法的参数中。请注意,price参数的类型是int,Spring MVC将尝试将查询参数的字符串值转换为int

在这里插入图片描述

处理可选参数

有时,查询参数可能是可选的。Spring MVC允许您将查询参数标记为可选,方法是设置required属性为false。例如:

@RequestMapping("/products")
public String getProducts(
    @RequestParam String category,
    @RequestParam(required = false) Integer price) {
    // 处理查询参数
    // ...
    return "products";
}

在上面的示例中,price参数被标记为可选,因为required属性被设置为false。如果请求中没有price查询参数,price将为null

处理多个值

有时,查询参数可以有多个值,例如,多选框的选择或同一参数多次出现在查询字符串中。Spring MVC可以处理多个值的查询参数。您可以将方法参数声明为数组或列表类型来处理多个值。例如:

@RequestMapping("/products")
public String getProducts(
    @RequestParam String category,
    @RequestParam List<String> tags) {
    // 处理多个值的查询参数
    // ...
    return "products";
}

在上面的示例中,tags参数将包含多个值,您可以遍历它们以执行适当的操作。

处理查询参数的默认值

有时,您可能需要为缺少的查询参数设置默认值。Spring MVC允许您使用defaultValue属性来设置默认值。例如:

@RequestMapping("/products")
public String getProducts(
    @RequestParam(defaultValue = "all") String category,
    @RequestParam(defaultValue = "0") int price) {
    // 处理查询参数
    // ...
    return "products";
}

在上面的示例中,如果请求中没有提供category参数,它将默认为"all"。同样,如果没有提供price参数,它将默认为0

处理查询字符串

除了@RequestParam注解,Spring MVC还提供了@RequestParam Map<String, String> params参数,它可以用于处理未知数量的查询参数。这个参数将查询参数的名称作为键,查询参数的值作为值,放入一个Map中。例如:

@RequestMapping("/products")
public String getProducts(@RequestParam Map<String, String> params) {
    // 处理查询参数的Map
    // ...
    return "products";
}

在上面的示例中,params参数将包含所有的查询参数,您可以从中提取您需要的值。

示例:创建一个RESTful服务

现在,让我们通过一个示例来创建一个简单的RESTful服务,该服务接受查询参数并返回相应的产品信息。首先,定义一个Product类来表示产品:

public class Product {
    private String name;
    private String category;
    private double price;

    // 省略构造函数和getter/setter
}

接下来,创建一个Spring MVC控制器:

@Controller
public class ProductController {

    private List<Product> products = new ArrayList<>();

    public ProductController() {
        // 初始化产品列表
        products.add(new Product("Laptop", "Electronics", 799.99));
        products.add(new Product("Headphones", "Electronics", 149.99));
        products.add(new Product("T-shirt", "Clothing", 19.99));
    }

    @RequestMapping("/products")
    public ResponseEntity<List<Product>> getProducts(
        @RequestParam(required = false) String category,
        @RequestParam(defaultValue = "0") double maxPrice) {
        List<Product> result = new ArrayList<>();

        for (Product product : products) {
            if ((category == null || product.getCategory().equals(category)) &&
                product.getPrice() <= maxPrice) {
                result.add(product);
            }
        }

        return new ResponseEntity<>(result, HttpStatus.OK);
    }
}

在上面的示例中,ProductController类初始化了一些产品,并且提供了一个getProducts方法来处理查询参数,并返回符合条件的产品信息。

您可以通过以下URL来访问该服务:

  • 获取所有产品:/products
  • 获取指定类别的产品:/products?category=Electronics
  • 获取价格不超过指定值的产品:/products?maxPrice=100

在这里插入图片描述

结论

Spring MVC提供了强大的功能来处理查询字符串和查询参数,使开发人员能够轻松地构建Web应用程序和RESTful服务。通过使用@RequestParam注解,您可以方便地访问和处理查询参数。同时,Spring MVC还支持处理多个值、可选参数和默认值,使得开发更加灵活。希望本文对Java新手在Spring MVC中使用查询字符串和查询参数有所帮助。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

06 迪米特法则

官方定义 迪米特法则&#xff08;LoD&#xff1a;Law of Demeter&#xff09;又叫最少知识原则&#xff08;LKP&#xff1a;Least Knowledge Principle &#xff09;&#xff0c;指的是一个类/模块对其他的类/模块有越少的了解越 好。简言之&#xff1a;talk only to your imm…

MySQL的ACID和并发事务带来的问题简单总结

拓跋阿秀 ACID 原子性&#xff1a;一个事务&#xff08;transaction&#xff09;中的所有操作&#xff0c;要么全部完成&#xff0c;要么全部不完成&#xff0c;不会结束在中间某个环节。事务在执行过程中发生错误&#xff0c;会被恢复&#xff08;Rollback&#xff09;到事务…

【知识图谱】KBQA核心架构小结

KBQA是指基于知识图谱的问答系统&#xff0c;是知识图谱的重要应用形式&#xff0c;基于知识图谱的问答和基于LLM的问答殊途同归。 KBQA是一个系统&#xff0c;由多种功能模块组成&#xff0c;其核心架构梳理如下&#xff1a; 下面对各个模块简单小结 文本清洗 只有是文本的…

dashboard报错 错误:无法获取网络列表、dashboard报错 错误:无法获取云主机列表 解决流程

文章目录 错误说明dashboard上报错底层命令报错查看日志message日志httpd报错日志错误日志分析开始解决测试底层命令dashboard错误说明 dashboard上报错 首先,dashboard上无论是管理员还是其他项目,均无法获取云主机和网络信息,具体报错如下

广州虚拟动力携数字人全栈式产品,邀您来2023世界VR产业大会(南昌)一探虚实

2023年10月19-20日&#xff0c;由工业和信息化部、江西省人民政府联合主办&#xff0c;中国电子信息产业发展研究院、江西省工业和信息化厅、南昌市人民政府、虚拟现实产业联盟共同承办的2023世界VR产业大会将在南昌绿地国际博览中心盛大举办。 广州虚拟动力作为3D、AI虚拟人领…

【C++笔记】多态的原理、单继承和多继承关系的虚函数表、 override 和 final、抽象类、重载、覆盖(重写)、隐藏(重定义)的对比

1.final关键字 引出&#xff1a;设计一个不能被继承的类。有如下方法&#xff1a; class A { private:A(int a0):_a(a){} public:static A CreateOBj(int a0){return A(a);} protected:int _a; } //简介限制&#xff0c;子类构成函数无法调用父类构造函数初始化 //子类的构造…

从零开始搭建第一个django项目

目录 配置环境创建 Django 项目和 APP项目组成  ‍子目录文件组成应用文件组成 配置 settings.py启动项目 数据表创建models.pyDjango-models的常用字段和常用配置 Django-admin 引入admin后台和管理员外键views.pyurls.pypostman接口测试 QuerySetInstance功能APIView 的概念…

Mistral AI发布一个拥有 73 亿参数模型Mistral 7B

导读法国人工智能初创公司 Mistral AI 宣布推出其首款大语言模型 Mistral 7B 是一个&#xff0c;号称是迄今为止同规模产品中最强大的语言模型&#xff1b;在 Apache-2.0 许可下开源&#xff0c;可完全免费使用&#xff0c;不受任何限制。 Mistral AI 是一个成立仅六个月的初创…

python实现TCPclient

python实现TCPclient是一件简单的事情&#xff0c;只要通过socket这个模块就可以实现。 一、实现步骤 1、导入模块&#xff1a; 首先&#xff0c;你需要导入Python的socket模块。 import socket2、创建Socket对象&#xff1a; 使用socket.socket()函数创建一个新的socket对…

美国开源数据库ScyllaDB完成4300万美元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国位于加州桑尼维尔的开源数据库ScyllaDB今日宣布完成4300万美元融资。 本轮融资由风险投资公司Eight Roads Ventures和AB Private Credit Investors领投。其他投资者包括TLV Partners&…

视觉 注意力机制——通道注意力、空间注意力、自注意力

前言 本文介绍注意力机制的概念和基本原理&#xff0c;并站在计算机视觉CV角度&#xff0c;进一步介绍通道注意力、空间注意力、混合注意力、自注意力等。 目录 前言 一、注意力机制 二、通道注意力机制 三、空间注意力机制 四、混合注意力机制 五、自注意力机制 六、…

基于多尺度超图的特征对齐网络--细胞定位

Paper Link&#xff1a;Multi-scale Hypergraph-based Feature Alignment Network for Cell Localization Code&#xff1a;https://github.com/Boli-trainee/MHFAN/tree/main 核心思想&#xff1a;利用多尺度超图来统一解决定位任务中形状、尺度和颜色方面的显著变化带来的挑…

elementui select组件下拉框底部增加自定义按钮

elementui select组件下拉框底部增加自定义按钮 el-select组件的visible-change 事件&#xff08;下拉框出现/隐藏时触发&#xff09; <el-selectref"select":value"value"placeholder"请选择"visible-change"visibleChange">&…

网络工程师知识点7

111、IS-IS路由器的三种类型&#xff1f; Level-1路由器&#xff08;只能创建level-1的LSDB&#xff09; Level-2路由器&#xff08;只能创建level-2的LSDB&#xff09; Level-1-2路由器&#xff08;路由器默认的类型&#xff0c;能同时创建level-1和level-2的LSDB&#xff09;…

如何开发微信小程序

前言 因为最近沉迷和朋友们一起下班去打麻将&#xff0c;他们推荐了一个计分的小程序&#xff0c;就不需要每局都转账或者用扑克牌记录了&#xff0c;但是这个小程序不仅打开有广告&#xff0c;各个页面都植入了广告&#xff0c;用起来十分不适。 于是我就心里暗自下定决心&a…

蓝桥杯每日一题2023.10.18

题目描述 特别数的和 - 蓝桥云课 (lanqiao.cn) 题目分析 简单枚举每一个可行的数 #include<bits/stdc.h> using namespace std; int flag, ans; int main() {int n;cin >> n;for(int i 1; i < n; i ){flag 0;int x i;while(x){int y x % 10;if(y 2 || y…

NewStarCTF2023week3-Rabin‘s RSA

根据题目提示是Rabin算法 先将N分解得到P和Q 导入e&#xff0c;n&#xff0c;p&#xff0c;q&#xff0c;c 使用Rabin算法直接计算明文&#xff0c;再将明文转字符串即可 我们也可以通过脚本来理解原理 import gmpy2 import libnump 13934102561950901579 q 144504527390…

全自动打包机检测不到货物怎么办?

全自动打包机也称无人化打包机或无人化捆扎机&#xff0c;是指在工作的过程中不需要人工干预&#xff0c;机器可以自动检测、自动输送、自动打包的设备。但最近有一些客户反映打包机不能自己检测到货物了。这是为什么呢&#xff1f; 1、电子眼感应太弱。电子眼的感应程度是可以…

棋盘覆盖问题(分治法)

裁判测试程序样例&#xff1a; #include <iostream> #include<fstream> #include <iomanip> #define MAX 1025 using namespace std; int board[MAX][MAX]; int tile1;void ChessBoard(int tr,int tc,int dr,int dc,int size);int main() { int dr,dc,size;…

GeoServer改造Springboot启动三(集成jdbcconfig和jdbcstore)

1、集成jdbc插件 1.1 由于GeoServer所有数据都在数据目录下,如果需要将数据存储数据库,这需要引入如图 13所示的两个插件。 图 13jdbc插件位置 1.2 右键两个插件的“pom.xml”,选择“Add as Maven Project”,模块就会加入maven关联。 图 14jdbc右键“Add as Maven Proje…