【Java】springboot 枚举参数

news2024/11/29 0:56:12

1/💤背景

很多大厂都要求了代码里面避免魔法值,如阿里巴巴开发规范 阿里巴巴Java开发手册1.4.0 ,那么使用枚举就是比较好避免的一个办法,比如 性别 0-未知 1-男 2-女

【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
反例:String key = “Id#taobao_” + tradeId;
cache.put(key, value);

1、Controller参数能否用枚举接收?
2、区分大小写?
3、传枚举的什么值?code 能自动识别么?

2/💫测试

为了比较全面的测试,我用三个枚举类进行了测试(实践出真知 )

public class TestEnum {
    public enum gender {
        man,
        woman
    }

    public enum club {
        A(1, "A"),
        B(2, "B");

        Integer number;
        String name;

        club(Integer number, String name) {
            this.number = number;
            this.name = name;
        }
    }

    public enum person {
        A(1, "qq", 23),
        B(2, "aa", 18);

        Integer number;
        String name;
        Integer age;

        person(Integer number, String name, Integer age) {
            this.number = number;
            this.name = name;
            this.age = age;
        }
    }
}

测试非常简单,写一个接口三个枚举参数或三个接口三个枚举参数


	@GetMapping("/gender")
    @ResponseBody
    public String admin(@RequestParam(required = false) TestEnum.gender name) {
        System.out.println(name);
        return "hello word!!!";
    }
    
     @GetMapping("/club")
    @ResponseBody
    public String admin(@RequestParam(required = false) TestEnum.club name) {
        System.out.println(name);
        return "hello word!!!";
    }
    
    @GetMapping("/person")
    @ResponseBody
    public String admin(@RequestParam(required = false) TestEnum.person name) {
        System.out.println(name);
        return "hello word!!!";
    }

然后手动调用接口,改变参数值,观察返回值和后台日志,打印出名称则表示获取到了对应的枚举,反之则未获取成功。

3/💦结果

测试比较简单,可以自己尝试一下,简单来说: 只能识别name

默认spring的接口对枚举类型的接收处理逻辑比较简单,就是直接匹配name,

所以有下面几点需要注意:

1、参数未传的时候,获取到的枚举是null,也就是默认值是空的

2、如果传不匹配的值(枚举中没有的值),会报转化类型错误 Failed to convert value of type 'xxx' to required type

3、只能匹配name 也就是枚举本身的名称,比如person枚举,想匹配A(1, "qq", 23),,只能匹配 A 这个参数, 接口请求person/?name=A,而与其他的值无关,比如 1qq23

4、区分大小写 ,传 a 得到的也是转化类型错误

当前我们可以自定义 spring 的ConverterConverterFactory来实现 自定义转化逻辑,那么你想怎么处理参数就是你自己的事情了,可以做兼容处理,识别里面的值来转化成枚举而不限定name。

不过本次测试的是默认的springboot对枚举的处理逻辑,讨论未做额外处理的情况下,spring接口使用枚举的效果和问题。如果后面的人想使用枚举来接收参数,那么就不会完全没有思路。

如果对你有用,点个赞吧。

日常偷图(侵删-。-)

在这里插入图片描述

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

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

相关文章

显卡、显卡驱动版本、cuda版本和Pytorch相互之间的依赖关系

问题 话不多说,本文主要就是探讨如何根据显卡和显卡驱动版本去选择相应的CUDA和Pytorch。 显卡 显卡驱动版本 打开cmd命令提示符,输入nvidia-smi然后按回车键: 需要关注两个地方: 显卡驱动版本:516.59显卡支持最高…

Zebec节点Zepoch销量接近800个,生态发展信心十足

Zebec Protocol目前已经获得了两轮历史融资额近4000万美元的融资,其投资者包括Coinbase、Distributed Global、OKX Blockdream Ventures 、Circle Venture等20多家全球一线投资机构,而在获得融资后Zebec Protocol也开始全力打造多链生态,以进…

第十章:聊聊ThreadLocal

是什么?能干嘛?常用API案例一以上代码存在的问题?演示线程池复用本地变量的情况ThreadLocal源码Thread,ThreadLocal,ThreadLocalMap 三者的关系?ThreadLocal 的 get 方法set、remove 方法总结ThreadLocal 之…

Java自动化测试调试中遇到的问题

前言:记录下遇到的问题 Java自动化测试在调试中遇到的问题总结 1、遇到的Waring:must be unique [WARNING] dependencies.dependency.(groupId:artifactId:type:classifier) must be unique: com.vertica.jdbc:vertica-jdbc:jar -> duplicate declaration of version 10.…

python的安装及常用语法(一)

python的安装及简单使用python解释器的安装1. windows系统安装方法2. 测试安装是否成功PyCharm代码编辑器的安装python的基础语法1. “input”用法:用户输入信息2. “bin”用法:将十进制转换为二进制3. “print”用法:输出信息4. 练习1. 张三…

modbus协议讲解,上位机与PLC交互

开发过程中modbus-RTU需要电脑USB口对外交互,参考我的文章:C# 通过Com端口和单片机通讯(232/485/USB)_花开莫与流年错_的博客-CSDN博客_c#与单片机通信 上位机和PLC交互的消息在Excel中配置,配置后通过Modbus协议加载…

数据结构之-队列实现

队列是一个先进先出的结构,可以用链表呀,数组来实现它,我们今天用数组实现个队列,以优先级队列方式,我们看看怎么实现,优先级队列以队列存储时规则会将即将过期的或较小的数据存储在前面,这样取…

【生成式网络】入门篇(四):CycleGAN 的 代码和结果记录

CycleGAN是一个里程碑式的工作,开启了unpaired的风格迁移的先河,斑马转马的效果还是很震惊。 具体原理可以参考 https://zhuanlan.zhihu.com/p/402819206 老习惯,直接上code,然后按照code进行一些解释 代码参考自 https://github.…

自托管书签管理器LinkAce

本文完成于 9 月下旬,当时的版本是 v1.10.4,发稿时最新版本为 v1.10.5 什么是 LinkAce ? LinkAce 是一个自托管档案,用于收集您喜爱的网站的链接,并保存文章以供日后阅读。LinkAce 提供了一个长期存档来存储指向网站、…

NVIDIA 7th SkyHackathon(二)开发套件的安装与测试

1.NeMo 开源工具包 1.1 关于 NeMo NeMo(Neural Modules)是 NVIDIA 发布的基于 PyTorch 的开源工具包,它允许开发者快速构建、训练和微调会话式人工智能模型 NeMo 由 NeMo Core 和 NeMo Collection 组成,NeMo Core 为所有模型和…

[附源码]Python计算机毕业设计Django的中点游戏分享网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

内容理解之情感计算

导语 概念定义:情感计算是自然语言处理领域的重要研究方向之一,其目标是赋予计算机类似于人一样的观察、理解和生成各种情感表达的能力,它是一个高度综合化的跨学科领域,涉及计算机科学、心理学、社会学和认知科学等。通过多学科…

物联网卡有哪些类型

伴随着科学技术的不断升级,不断发展,5G和物联网必定成为未来生活的主角,而现在5G已经慢慢在我们生活越来越常见,这是我们肉眼可以看见的,其实物联网如同5G一样,在我们生活中也随处可见,如我们平…

谈谈Go语言中函数的本质

在很多编程语言中,都会有函数一说,今天我们来聊聊Go语言中的函数。 废话不多说,咱们直接上代码~ 代码 package mainimport "fmt"func main() {fmt.Printf("%T\n", function1)fmt.Printf("%T\n", function2)…

跨越速运如何构建实时统一的运单分析

作者:张杰,跨越速运大数据架构师(本文为作者在 StarRocks Summit Asia 2022 上的分享) 作为大型现代化综合速运企业,跨越速运拥有 3000 多家服务网点 ,日均处理 30 多万票运单。海量运单数据涌来&#xff…

博科交换机使用

博科交换机使用 ip查询 博科交换机的默认IP地址是10.77.77.77,用户名admin,密码:password。 ipaddrshowip修改 ipaddrset端口查询 交换机的端口表示为(A,B)或者(A,B;C,D)。 A,C表示交换机的…

使用JLINK给GD32下载程序

使用JLINK给GD32下载程序关于GD32单片机需要的工具和软件包①Jlink仿真器一个②相关软件包下载准备①选择好芯片②在DEBUG中选择JLINK下载现象总结关于GD32单片机 GD32是兆易创新基于Arm Cortex-M内核和RISC-V内核,推出的32位通用微控制器,对比了下两者…

[附源码]Python计算机毕业设计SSM流浪宠物申领信息平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Java中进制基础知识与算法题

本篇文章旨在给大家普及下计算机内部数据的机器级表示方式,即:二进制、八进制、十进制、十六进制… 对于进制,我们从小最先接触的是十进制,这个也是我们日常生活中应用最多的数值统计方式。然而,现实中我们感觉到的媒体…

python的opencv操作记录(十)——图像融合

文章目录前言opencv中的一个方法泊松融合图像梯度图像散度融合图像散度通过散度场进行图像重建泊松融合的一般逻辑前言 最近碰到一个项目上的难题,是要从电动显微镜对焦的多张图像进行融合。因为,显微镜物镜的景深范围较小,可能在同一视野中…