当前位置: 首页 > news >正文

SpringBoot枚举入参实战

文章目录

  • 前言
  • 一、什么是枚举?
  • 二、枚举的优点
  • 三、枚举的缺点
  • 四、使用步骤
    • 1.代码实现
      • 1.1.枚举
      • 1.2.实体
      • 1.3.控制层
    • 2.Postman测试
      • 2.1.Get请求
        • 2.1.1.枚举参数
        • 2.1.2.对象枚举属性参数
      • 2.2.Post请求
        • 2.2.1.枚举参数
        • 2.2.2.对象枚举属性参数
      • 2.3.Put请求
        • 2.3.1.枚举参数
        • 2.3.2.对象枚举属性参数
  • 总结

前言

前端使用枚举名进行参数传递比传统使用code[1,2,3,4,5]更具语义


一、什么是枚举?

  • 枚举是一个特殊的类,它表示一组有限的值。在Java中,枚举类型是用于定义命名常量的一种方式。枚举常量是静态的、最终的和公共的,它们可以在整个应用程序中使用,而且具有自己的名称和值。
  • 它是将常量分组为一组的一种方法。枚举可以作为常量池使用,这样可以提高代码的可读性和可维护性。枚举在Java中非常有用,因为它们可以减少代码中的硬编码,并使代码更加自然和易于理解

二、枚举的优点

  • 安全性:枚举常量是静态和不可变的,在编译时即被确定,这意味着它们是类型安全的。
  • 易于维护:使用枚举可以将相关常量组织在一起,因此易于维护。
  • 易于阅读:由于枚举常量具有自己的名称,因此代码更易于理解和阅读。
  • 易于编写:使用枚举可以减少代码中的硬编码,因为它们提供了一种更自然的方式来定义常量。

三、枚举的缺点

  • 约束:枚举一旦定义了常量集合,就不能轻易地更改。这可能会导致一些不便。
  • 复杂性:在某些情况下,枚举可能过于复杂或不受欢迎。例如,如果只需要在代码中使用单个常量,那么定义一个完整的枚举可能会增加代码的复杂性。

四、使用步骤

1.代码实现

1.1.枚举

  • @JsonFormat(shape = JsonFormat.Shape.OBJECT)注解是用于控制JSON序列化和反序列化过程中形状的注解
  • @JsonFormat(shape = JsonFormat.Shape.OBJECT)注解可以用于以单个对象的形式输出Java对象,而不是以多个属性的形式输出。也就是说,@JsonFormat注解将Java对象视为一个整体,并以JSON对象的形式输出。
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;/*** @author 性别*/@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Gender {/*** 男士*/MALE(1, "男士"),/*** 女士*/FEMALE(2, "女士");/*** 编码*/private final Integer code;/*** 注释*///@JsonValueprivate final String desc;Gender(Integer code, String desc) {this.code = code;this.desc = desc;}public static Gender fromString(String value) {if (value == null) {return null;}for (Gender gender : Gender.values()) {if (gender.name().equalsIgnoreCase(value)) {return gender;}}return null;}public static Gender fromCode(Integer code) {if (code == null) {return null;}for (Gender gender : Gender.values()) {if (gender.getCode().equals(code)) {return gender;}}throw new IllegalArgumentException("Invalid code: " + code);}
}

1.2.实体

  • @ModelAttribute(“gender”)注解是Spring MVC中用于将数据添加到模型中的注解。它通常用于在处理请求之前加载一些基本数据,从而减轻视图和控制器之间的负担
  • @ModelAttribute(“gender”)注解将一个名为"gender"的属性添加到模型中,并将其值设置为标记方法的返回值。此外,如果使用了value属性,则该值将用作属性的名称,而不是默认名称。当视图被渲染时,该属性将被传递到视图中,以便可以在视图中使用它
import com.mxf.code.enums.Gender;
import org.springframework.web.bind.annotation.ModelAttribute;/*** @author mxf* @version 1.0* @description: Person* @date 2023/5/25*/public class Person {private Long id;private String name;private Gender gender;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Gender getGender() {return gender;}@ModelAttribute("gender")public void setGender(Gender gender) {this.gender = gender;}
}

1.3.控制层

import com.mxf.code.entity.Person;
import com.mxf.code.enums.Gender;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;/*** @author mxf* @version 1.0* @description: 枚举Controller* @date 2023/5/25*/
@RestController
@RequestMapping("enum/test")
@Slf4j
public class EnumController {@GetMapping("getTest01")@ResponseBodypublic Gender getTest01(@ModelAttribute("gender") Gender gender) {return gender;}@GetMapping("getTest02")public Person getTest02(Person person) {return person;}@PostMapping("postTest01")@ResponseBodypublic Gender postTest01(@ModelAttribute("gender") Gender gender) {return gender;}@PostMapping("postTest02")public Person postTest02(@RequestBody Person person) {return person;}@PutMapping("putTest01")public Gender putTest01(@ModelAttribute("gender") Gender gender) {return gender;}@PutMapping("putTest02")public Gender putTest02(@RequestBody Person person) {return person.getGender();}@PutMapping("putTest03")public Person putTest03(@RequestBody Person person) {return person;}
}

2.Postman测试

2.1.Get请求

2.1.1.枚举参数

@GetMapping("getTest01")
@ResponseBody
public Gender getTest01(@ModelAttribute("gender") Gender gender) {return gender;
}

在这里插入图片描述

2.1.2.对象枚举属性参数

@GetMapping("getTest02")
public Person getTest02(Person person) {return person;
}

在这里插入图片描述


2.2.Post请求

2.2.1.枚举参数

@PostMapping("postTest01")
@ResponseBody
public Gender postTest01(@ModelAttribute("gender") Gender gender) {return gender;
}

在这里插入图片描述

2.2.2.对象枚举属性参数

@PostMapping("postTest02")
public Person postTest02(@RequestBody Person person) {return person;
}

在这里插入图片描述


2.3.Put请求

2.3.1.枚举参数

@PutMapping("putTest01")
public Gender putTest01(@ModelAttribute("gender") Gender gender) {return gender;
}

在这里插入图片描述

2.3.2.对象枚举属性参数

@PutMapping("putTest02")
public Gender putTest02(@RequestBody Person person) {return person.getGender();
}

在这里插入图片描述


总结

使用枚举名称传参更能直观的展示其参数代表的具体含义,例如参数传MALE还是传1

相关文章:

SpringBoot枚举入参实战

文章目录 前言一、什么是枚举?二、枚举的优点三、枚举的缺点四、使用步骤1.代码实现1.1.枚举1.2.实体1.3.控制层 2.Postman测试2.1.Get请求2.1.1.枚举参数2.1.2.对象枚举属性参数 2.2.Post请求2.2.1.枚举参数2.2.2.对象枚举属性参数 2.3.Put请求2.3.1.枚举参数2.3.2…...

Ansible介绍

文章目录 Ansible介绍Ansible的架构为什么要有Ansible TowerAnsible Tower Ansible介绍 Ansible是一种自动化工具,可以用于自动化部署、配置和管理IT基础设施。它是一种基于Python的开源软件,提供了一个简单易用的语言和工具集,使得自动化管…...

GPT-4的免费使用方法分享

目录 方法1:使用Ora.sh的LLM应用 方法2:使用https://steamship.com 方法3:使用https://nat.dev 方法4:http://tdchat.vip 方法5:使用Poe网站或App 方法6:使用 Opencat App 方法7:使用https://Huggin…...

一个产品的诞生

一个产品的诞生 一个产品的诞生通常需要经历多个阶段,包括市场调研、产品设计、原型制作、测试和生产等。在市场调研阶段,公司会了解消费者的需求和市场趋势,以确定产品的定位和特点。在产品设计阶段,设计师会根据市场调研结果和…...

MQTT与传统的HTTP协议对比,优势在哪里呢?

HTTP是应用最为广泛和流行的协议。但是MQTT在过去的几年里迅速取得了进展。在讨论物联网开发的时候,开发者必须在这两者之间作出选择。 MQTT集中于数据,而HTTP集中于文档。HTTP是一个用于客户端-服务器计算的请求-响应协议,它并非总是为移动设…...

热榜!阿里出品2023版Java架构师面试指南,涵盖Java所有核心技能

最近很多粉丝朋友私信我说:熬过了去年的寒冬却没熬过现在的内卷;打开Boss直拒一排已读不回,回的基本都是外包,薪资还给的不高,对技术水平要求也远超从前;感觉Java一个初中级岗位有上千人同时竞争&#xff0…...

【小程序】封装时间选择组件:用单元格van-cell和插槽slot,包括起始时间和终止时间

效果 可以选择起始时间和终止时间,并显示。 时间选择器放在van-cell的value插槽中。 用的库: https://vant-contrib.gitee.io/vant-weapp/#/home https://dayjs.fenxianglu.cn/category/ 用的组件:Cell单元格、DatetimePicker时间选择、Pop…...

华为OD机试真题B卷 Java 实现【猜密码】

一、题目描述 小杨申请了一个保密柜,但是他忘记了密码。只记得密码都是数字,而且所有数字都是不重复的。 请你根据他记住的数字范围和密码的最小数字数量,帮他算下有哪些可能的组合,规则如下: 输出的组合都是从可选的数字范围中选取的,且不能重复;输出的密码数字要按照…...

沉淀-MYSQL

MYSQL学习 数据库操作 创建数据库 create database db_name; 删除数据库 drop database db_name; 选择/使用数据库 use db_name; 使用mysqladmin在终端执行 创建数据库 mysqladmin -u root -p create db_name Enter password:*** 删除数据库 mysqladmin -u root -p drop db…...

OJ练习第116题——二进制矩阵中的最短路径(BFS)

二进制矩阵中的最短路径 力扣链接:1091. 二进制矩阵中的最短路径 题目描述 给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。 二进制矩阵中的 畅通路径 是一条从 左上角 单元格&am…...

2023上半年软件设计师真题评析

2023年上半年软设是2018年改版后的一次考试,以下内容根据考完回忆结合网上暂时流传的真题(不保证完全正确)整理,主要侧重相关知识点罗列,少讲或不讲具体的答案,主要给自己的计算机基础查漏补缺,同时也希望对大家有帮助…...

(汇编) 基于VS的x86汇编基础指令

文章目录 环境汇编基础标志位常用指令 vs配置END 环境 visual studio 选择x86运行 示例代码 /** | 32位 | 16位 | 高8位 | 低8位 | | ---- | ---- | ----- | ----- | | EAX | AX | AH | AL |*/ #include <iostream>int main() {int32_t x 1;int32_t y 2;//…...

算法Day16 | 104.二叉树的最大深度,559.n叉树的最大深度, 111.二叉树的最小深度,222.完全二叉树的节点个数

Day16 104.二叉树的最大深度559.n叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数 104.二叉树的最大深度 题目链接&#xff1a; 104.二叉树的最大深度 深度和高度相反。 高度&#xff0c;自然是从下向上数&#xff1a;叶子节点是第一层&#xff0c;往上数&#x…...

java设计模式之责任链设计模式的前世今生

责任链设计模式是什么&#xff1f; 责任链设计模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许多个对象都有机会处理请求&#xff0c;从而避免请求的发送者与接收者之间的耦合关系。在责任链模式中&#xff0c;每个处理对…...

是面试官放水,还是公司太缺人了?华为原来这么容易就进了...

华为是大企业&#xff0c;是不是很难进去啊&#xff1f;” “在华为做软件测试&#xff0c;能得到很好的发展吗&#xff1f; 一进去就有9.5K&#xff0c;其实也没有想的那么难” 直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在字节和腾…...

PLC/DCS系统常见的干扰现象及判断方法

一般来说&#xff0c;常见的干扰现象有以下几种&#xff1a; 1.系统发指令时&#xff0c;电机无规则地转动&#xff1b; 2.信号等于零时&#xff0c;数字显示表数值乱跳; 3。传感器工作时&#xff0c;DCS/PLC 采集过来的信号与实际参数所对应的信号值不吻合&#xff0c;且误…...

c++ 11标准模板(STL) std::map(四)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…...

6.开源非对称加密算法SM2实现

6.开源非对称加密算法SM2实现 前期内容导读&#xff1a; 开源加解密RSA/AES/SHA1/PGP/SM2/SM3/SM4介绍开源AES/SM4/3DES对称加密算法介绍及其实现开源AES/SM4/3DES对称加密算法的验证实现开源非对称加密算法RSA/SM2实现及其应用开源非对称加密算法RSA实现 1. 开源组件 非对称秘…...

Toolformer and Tool Learning(LLMs如何使用工具)

大模型的能力让学术和工业界都对通用人工智能的未来充满幻想&#xff0c;在前一篇博文中已经粗略介绍&#xff0c; Augmented Language Models&#xff08;增强语言模型&#xff09; ALM的两大思路是推理和工具&#xff0c;本篇博文整理两篇关于Toolformer或Tool Learning的论…...

029:Mapbox GL绘制铁路黑白交替的线段

第029个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载数据显示铁路标识的那种黑白交替的线段。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共94行)相关API参考:专栏目标示例效果 配置方式 1)…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...