上海网站设计见建设怎样重新安装电脑wordpress

web/2025/10/8 3:53:55/文章来源:
上海网站设计见建设,怎样重新安装电脑wordpress,申请建设网站经费的请示,wordpress插件 数据原文链接#xff1a;赵侠客 前言 枚举类型在开发中是很常见的#xff0c;有非常多的应用场景#xff0c;如状态管理、类型分类、权限控制、配置管理、错误码管理、日志级别等。正确合理的使用枚举可以给我们带来非常多的好处#xff1a; 增强代码可读性#xff1a;枚举可… 原文链接赵侠客 前言 枚举类型在开发中是很常见的有非常多的应用场景如状态管理、类型分类、权限控制、配置管理、错误码管理、日志级别等。正确合理的使用枚举可以给我们带来非常多的好处 增强代码可读性枚举可以使得代码更加清晰、易于理解。它们提供了一种方式来组织和表示相关的常量值使得代码更易于阅读和维护。类型安全性枚举类型能够限制变量的值只能取枚举类型中定义的常量之一从而避免了错误的赋值。这有助于减少代码中的错误并提高代码的稳定性。更好的维护性枚举类型可以在编译时进行类型检查这有助于更早地发现和修复问题。此外由于枚举类型中的常量值是预定义的因此可以减少对常量值的修改从而简化代码的维护。更好的性能枚举类型的值是在编译时确定的因此在运行时访问枚举类型的值会更快。此外由于枚举类型中的常量值是唯一的因此可以直接使用“”进行两个值之间的对比这有助于提高性能。更好的组织性枚举类型可以帮助我们将相关的值组织在一起使代码更加整洁。通过将相关的常量值组合在一起可以使代码更加易于理解和维护。可扩展性枚举类型可以轻松地扩展或更新而不会对其他部分的代码造成影响。这有助于保持代码的灵活性和可扩展性。便于测试枚举类型可以方便地进行测试因为它们具有有限且确定的值域。这使得测试人员可以更容易地覆盖所有可能的场景并确保代码的正确性。 虽然枚举有诸多的好处但是使用枚举也给我们带来了一些困扰 前后端数据格式转换前端主要给用户展示数据不能直接显示枚举值需要前端将枚举转成用户可读的数据显示数据库的存储代码中的枚举类型无法直接存储数据库一般转成数值类型这样还可以减少存储空间代码中大量类型转换查询时需要数值类型转成枚举类型保存时又需要将枚举类型转成数值类型 针对枚举存在的问题本文介绍一种枚举从数据库–后端代码–前端代码–页面和从页面–前端代码–后端代码–数据库的自动转换方案大大方便前后端使用枚举类型。 自动转换目标 我们以用户状态为例用户有两种状态禁用和启用 前端页面前端页面显示用户状态时用“禁用、启用”前端代码前端代码里处理用户状态时用“ENABLE、DISABLE”或者用“0、1”后端代码后端代码使用StatusEnum枚举类数据库数据库存储用户状态时禁用存1、启用存0。 我们的目标是让枚举在各个环境流转时全自动转换。 代码与数据库自动转换 第一步创建统一的枚举基类BaseEnum public interface BaseEnum {int getCode();String getName();String getEnumName();static T extends BaseEnum T getInstance(ClassT clazz, String value) {T[] constants clazz.getEnumConstants();for (T t : constants) {if(StrUtil.isNumeric(value)){if (t.getCode() Integer.parseInt(value)) {return t;}}else {if (t.getEnumName().equals(value)) {return t;}}}return null;} }第二步创建用户状态类StatusEnum实现BaseEnum接口 public enum StatusEnum implements BaseEnum {ENABLE(0,启用),DISABLE(1,禁用);EnumValueprivate int code;private String name;StatusEnum(int code, String name) {this.code code;this.namename;}Overridepublic int getCode() {return code;}Overridepublic String getName() {return name;}Overridepublic String getEnumName() {return this.name();} }BaseEnum主要有三个方法 getCode()获取枚举的数值如“0、1”;getName()获取枚举显示值如“禁用、启用” ;getEnumName()获取枚举的枚举值如“ENABLE、DISABLE”. 如果使用MybatisPlus, 可以使用EnumValue注解很方便的帮我们解决数据库与实体对象中枚举类型的相互转换如果只使用的Mybatis可以自定义TypeHandler来解决数据库到JAVA枚举对象的自动转换。 第三步创建用户类User用户状态使用StatusEnum类 Data TableName(user) public class User {private Long id;private String userName;private StatusEnum status; }前后端相互转换 当前端查询用户时我们希望将枚举的三个属性都返回给前端前端页面显示时取status.name代码中使用status.enum或者status.code {id: 3581209395268,userName: test28531.cn,status: {name: 禁用,enum: DISABLE,code: 1} }为了达到将枚举序列化成一个json对象我们需要自定义序列化器和反序列化器以下以SpringBoot自带的Jackson为例 public class BaseEnumSerializer extends StdSerializerBaseEnum {public BaseEnumSerializer() {this(null);}public BaseEnumSerializer(ClassBaseEnum t) {super(t);}Overridepublic void serialize(BaseEnum value, JsonGenerator gen, SerializerProvider provider) throws IOException {gen.writeStartObject();gen.writeStringField(name,value.getName());gen.writeStringField(enum,value.getEnumName());gen.writeNumberField(code,value.getCode());gen.writeEndObject();;} } public class BaseEnumDeserializerT extends BaseEnum extends StdDeserializerT {private ClassT type;public BaseEnumDeserializer() {this(null);}public BaseEnumDeserializer(ClassT vc) {super(vc);type vc;}Overridepublic T deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {return BaseEnum.getInstance(type, p.getText());} } 自定义Jackson序列化器与反序列化器只能解决数据类型为application/json格式的请求当请求类型为application/x-www-form-urlencoded我们还需要自定义Spring消息转换器 public class NumBaseEnumConverterFactory implements ConverterFactoryNumber, BaseEnum {Overridepublic T extends BaseEnum ConverterNumber, T getConverter(ClassT aClass) {return new NumberToEnumConverter(aClass);}private final class NumberToEnumConverterT extends BaseEnum implements ConverterNumber, T {private ClassT enumType;public NumberToEnumConverter(ClassT enumType) {this.enumType enumType;}Overridepublic T convert(Number s) {return BaseEnum.getInstance(enumType,s.toString());}} }public class StrBaseEnumConverterFactory implements ConverterFactoryString, BaseEnum {Overridepublic T extends BaseEnum ConverterString, T getConverter(ClassT aClass) {return new StringToEnumConverter(aClass);}private final class StringToEnumConverterT extends BaseEnum implements ConverterString, T {private ClassT enumType;public StringToEnumConverter(ClassT enumType) {this.enumType enumType;}Overridepublic T convert(String s) {return BaseEnum.getInstance(enumType,s);}} } 以上两个消息转换器可以在数据格式以表单形式提交时将数值类型(0、1)和枚举值类型ENABLE、DISABLE转成枚举类型。 将自定义好的数据转换器注入到Spring中这样就完成所有枚举自动转换。 Configuration public class WebConfig implements WebMvcConfigurer {Beanpublic ObjectMapper objectMapper() {ObjectMapper mapper new ObjectMapper();SimpleModule module new SimpleModule();module.addSerializer(BaseEnum.class, new BaseEnumSerializer());module.addDeserializer(BaseEnum.class, new BaseEnumDeserializer());mapper.registerModule(module);mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);return mapper;}Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverterFactory(new StrBaseEnumConverterFactory());registry.addConverterFactory(new NumBaseEnumConverterFactory());} }查询用户 GET http://localhost:90/user/3581209395268 返回: {id: 3581209395268,userName: test28531.cn,status: {name: 启用,enum: ENABLE,code: 0} } application/json格式传参 POST http://localhost:90/user Content-Type: application/json{id: 3581209395268,status: DISABLE }### POST http://localhost:90/user Content-Type: application/json{id: 3581209395268,status: 0 }application/x-www-form-urlencoded格式传参 PUT http://localhost:90/user Content-Type: application/x-www-form-urlencodedid3581209395268statusENABLE ### PUT http://localhost:90/user Content-Type: application/x-www-form-urlencodedid3581209395268status1### PUT http://localhost:90/user/3581209395268?statusENABLE Content-Type: application/x-www-form-urlencoded### PUT http://localhost:90/user/3581209395268?status1 Content-Type: application/x-www-form-urlencoded PathVariable格式传参 PUT http://localhost:90/user/3581209395268/ENABLE Content-Type: application/x-www-form-urlencoded### PUT http://localhost:90/user/3581209395268/1 Content-Type: application/x-www-form-urlencoded 对应JAVA代码 RestController public class UserController {Resourceprivate UserMapper userMapper;GetMapping(/user/{id})public User getById(PathVariable Long id) {return userMapper.selectById(id);}PostMapping(/user)public User upadteById(RequestBody User user) {userMapper.updateById(user);return user;}PutMapping(/user)public User updateUser(User user) {userMapper.updateById(user);return user;}PutMapping(/user/{id}/{status})public User updateStatus(PathVariable Long id,PathVariable StatusEnum status) {User useruserMapper.selectById(id);user.setStatus(status);userMapper.updateById(user);return user;}PutMapping(/user/{id})public User updateUserStatus(PathVariable Long id,RequestParam StatusEnum status) {User useruserMapper.selectById(id);user.setStatus(status);userMapper.updateById(user);return user;} } 这样很方便的解决了枚举在各个环节的自动转换问题其它枚举只要实现BaseEnum接口就能实现全自动转换前后端用起来也方便了不少。 总结 本文主要介绍了项目中使用枚举的优缺点并针对缺点给出了解决方案解决了枚举在项目中频繁转换的问题当然解决的还不是非常完美比如返回给前端的枚举格式是{enum:DISABLE,code:1} 但是保存时传此数据结构后端却无法正确的转成枚举我们可以创建StatusEnumDeserializer,将子json对象转成对应枚举就好了但是范型的写法目前还不知道怎么写不可能增加一个枚举写一个反序列化器有知道的可以回复一下相互学习。 public class StatusEnumDeserializer extends JsonDeserializerStatusEnum {Overridepublic StatusEnum deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {JsonNode node p.getCodec().readTree(p);if(node.isObject()){String name node.get(enum).toString();return BaseEnum.getInstance(StatusEnum.class, name);}else {return BaseEnum.getInstance(StatusEnum.class, node.textValue());}} }

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

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

相关文章

定制企业网站建设制作域名网站怎么打开

1) 新建源文件 打开 CodeBlocks ,在上方菜单栏中选择 “文件 --> 新建 --> 空白文件”,如下图所示: 或者直接按下 Ctrl Shift N 组合键,都会新建一个空白的源文件,如下图所示: 在空白源文件中输入…

柯桥做网站哪家好济南软件开发公司

本文聊一个程序员都会关注的问题:性能。 当大家谈到“性能”时,你首先想到的会是什么? 是每次请求需要多长时间才能返回? 是每秒钟能够处理多少次请求? 还是程序的CPU和内存使用率高不高? 这些问题基本上…

建筑业资质查询网站工信部网站备案用户名

目录 4.通过继承实现员工工资核算打印功能 6.父类和子类中通过this和super都可以调用哪些属性和方法 8.扩展如下的BankAccount类 10.判断测试类中创建的两个对象是否相等 11.向上转型&向下转型 12.equals和的区别 15.什么是多态,多态具体体现有哪些? 16. java的动…

昌平建设网站网站开发选定制还是模板

在C中,->是一个运算符,称为成员访问运算符(Member Access Operator)。它用于通过指针访问对象的成员(变量或函数)。 下面是对->运算符的详细解释: 语法: pointer->member …

有没有做校园文化的网站百度做app的网站

展开全部JAVA环境变量设置一、下载JDK。62616964757a686964616fe4b893e5b19e31333363376561下载后是一个可执行程序,双击安装,安装路径为C:\Program Files\Java\jdk1.6.0_22\(当然,其他路径也可以),如下图:二、设置环境…

网站建设都有那些费用做网站公司有哪些

选择题 题目:电路如图所示,Ua( )V,Ub( )V 题目:实际电流源开路时,该电流源内部 题目:电压和电流的参考方向关联的含义是 题目:用万用表测量电阻时…

网站建设创业网站制作和收费标准

题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n1行,每行n个数,第i1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k 共n行,每行n个数&…

酒店网站制作策划平昌城乡与住房建设部网站

听说你会画蛋,“圆蛋”画得好这是上天的垂青,但要成为一名令人仰慕的画家,还要靠你不懈的追求。愿你为“圆蛋”而努力,因元旦而快乐终生!元旦要到,预祝你用开心享受节日每一秒,用高兴感受生活真…

创办一个网站如何自己建造网站

一、传统机器学习分类流程与经典思想算法简述 传统机器学习是指,利用线性代数、数理统计与优化算法等数学方式从设计获取的数据集中构建预测学习器,进而对未知数据分类或回归。其主要流程大致可分为七个部分,依次为设计获取数据特征集&#x…

网站静态化对seowordpress get

一、赋值与引用 当你将一个变量赋值给另一个变量时,实际上是将一个对象的引用(内存地址)赋给了另一个变量,而不是创建了一个新的对象。因此,这两个变量将指向相同的内存地址,修改其中一个变量的值将会影响…

有免费可以做的网站吗网站空间在哪买好

我在整个屏幕上显示一个回收站视图,该回收站视图只有一个图像视图,我想知道如何在回收站适配器之外获取屏幕上显示的imageview的位置。我试图实现一个接口,但结果不准确。我想立即保存当前位置。我的回收站适配器:public class Re…

安徽省建设工程信息网官网是什么网站广告投放方式

北京的Java培训班有很多,价格却是相差不多的,但培训的课程就参差不齐了,有的培训班就是为了赚钱而存在的,想要系统的学习Java,确保学习效果,那么你一定要挑选正规的Java培训班,挑选适合自己的Ja…

线在成都网站推广公司什么网站的地图

Docker 为用户提供了在 Ubuntu Linux 上快速创建虚拟容器的能力。但是,那些不想使用命令行管理容器的人可以在 Ubuntu 24.04 LTS 上安装 Docker Desktop GUI,本教程将提供用于设置 Docker 图形用户界面的命令…… Docker Desktop 是一个易于使用的集成容…

网页设计专业学校优化网站排名如何

乘风破浪:LeetCode真题_010_Regular Expression Matching 一、前言 关于正则表达式我们使用得非常多,但是如果让我们自己写一个,却是有非常大的困难的,我们可能想到状态机,确定,非确定状态机确实是一种解决…

vps怎么搭建网站电子商务网站建设的首要问题

产品主要特点: -设备安装方便简洁,可通过3M胶直接将设备粘 贴到车前挡风玻璃上 -支持IE预览,手机,PAD实时预览, 支持电脑客 户端实时预览功能 -内置2路模拟高清, 每路均可达到200万像素。另 外可扩充2路1080P模拟…

有限公司网站入口佛山网站建设公司哪家比较好

目录 组件介绍 组件声明结构 组件接口 script dependency template style 状态注入 接口声明 组件介绍 Component 扩充自 Vue 的组件, 提供了 Vue 组件对等的输入参数能力。在代码书写时提供类 class 的装饰器 Decorator 风格。 import { Component, Watch } from al…

外贸网站模板 外贸网站制作龙岗微信网站制作

在 linux上安装 Redis 可以按照以下步骤进行(此处用Ubuntu 服务器进行讲解): 步骤 1: 更新系统包 打开终端并运行以下命令以确保你的系统是最新的: sudo apt update sudo apt upgrade步骤 2: 安装 Redis 使用 apt 包管理器安装 Redis: s…

dede网站安全设置合肥网络推广软件系统

目录 Python基础(二)--数据类型,运算符与流程控制 1 数据类型 1.1 Python中的数据类型 1.2 整数类型(int) 1.3 布尔类型 1.4 浮点类型 1.5 复数类型 1.6 类型转换 2 运算符 2.1 算术运算符 2.2 布尔运算符 …

深圳北站网站建设南京江北新区

ORACLE行转列、列转行实现方式及案例 行转列案例方式1.PIVOT方式2.MAX和DECODE方式3.CASE WHEN和GROUP BY 列转行案例方式1.UNPIVOT方式2.UNION ALL 行转列 案例 假设我们有一个名为sales的表,其中包含了产品销售数据。表中有三列:product(…

丑陋网站设计赏析事业单位网站建设费入什么科目

智慧公厕作为城市基础设施的重要组成部分,正逐渐成为改善城市品质和提升居民生活体验的一项关键措施。通过智能化管理、数字化使用和信息化运行,智慧公厕不仅可以为城市居民带来更舒适便利的使用体验,而且对于城市的高质量发展、宜居性和包容…