首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一站式解决使用枚举各种痛点

如果变量值仅有有限可选值,那么用枚举类来定义常量是一个很常规操作。 但是在业务代码,我们希望依赖 ordinary() 进行业务运算,而是自定义数字属性,避免枚举增减调序造成影响。...在 JPA 规范,提供了 javax.persistence.AttributeConverter 接口,用于扩展对象属性和数据库字段类型映射。...有两种方式 AttributeConverter 注册到全局 JPA 容器,此时需要与 javax.persistence.Converter 配合使用 第二种方式是配合 javax.persistence.Convert...SpringMVC 枚举转化器只能支持 GET 请求参数转化,如果前端提交 JSON 格式 POST 请求,那还是不支持。...另外,在给前端输出 VO 时,默认情况下,还是要手动把枚举类型映射成 Integer 类型,并不能在 VO 中直接使用枚举输出。

1.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

IM通讯协议专题学习(六):手把手教你如何在Android上从零使用Protobuf

《IM通讯协议专题学习(六):手把手教你如何在Android上从零使用Protobuf》(* 本文)《IM通讯协议专题学习(七):手把手教你如何在NodeJS从零使用Protobuf》《IM通讯协议专题学习...,并且在使用消息类型后不应更改);3)1-15 字段编号只占一个字节进行编码,16-2047 字段编号占两个字节,包括字段编号和字段类型,因此建议更多使用 1-15 字段编号;4)可以指定最小字段编号为...冬WINTER = 3;}//对 season 进行编号Season season = 2;}有几个地方需要注意:1)定义枚举类型使用 enum 关键字;2)枚举类型第一个字段值为必须 0,否则编译会报错...;3)枚举常量值必须在 32 位整型范围内(因为 enum 值是使用可变编码方式,对负数不够高效,因此推荐在 enum 中使用负数);4)枚举里面的 = 操作是对常量进行赋值操作,而枚举外面的...,当我们 Protobuf 转换为 JSON 后,在把 JSON 转换为对应 Java 对象。

2.8K60

上篇|Jackson注解用法和场景,不看巨亏

@JsonAnyGetter 在json序列化时可以Beanjava.util.Map类型属性“平铺展开”,举个例子: 某个Java Bean正常json序列化结果是: { "name":...方法返回值必须是java.util.Map。 一个实体只能使用一个该注解。 @JsonAnySetter 正好和@JsonAnyGetter相反,这里就不介绍了。...@JsonEnumDefaultValue 我们在定义性别枚举时往往只定义了男和女两个性别。你不能指望用户守规矩。科学方法是定义一个枚举用来兜底。...@JsonFilter 同一个实体类根据不同场景可能需要不同序列化策略。比如对于A用户实体某些字段可见,对于B用户另一些字段可见,实现动态数据字段权限。...这种情况下,jackson其它一些静态注解就很难实现,借助于@JsonFilter反而简单了,下面是实现方法: // 只序列化age策略 @JsonFilter("role_a") public class

1.8K30

破除匪夷所思bugs,从修正编译警告开始

建议: 避免这种行为,但这种情况下大多数出现在作为函数参数。但你要明确是尽管作为扩展(以后使用)用函数参数,是否应该考虑下本身设计问题。...警告:隐式转换浮点数转换为整数:"double"到"int"。 致命行为: 丢失精度,类似于蝴蝶效应,小小精度却会引起巨大误差。 整型转换枚举导致枚举变量成不确定值。...但有些情况下却不会,例如整型转换浮点型,枚举整型。它们都是从小范围转换到大范围。...使用'=='将该赋值转换为相等比较 致命行为: 唔使用导致判断一直生效或失效行为。...读者也有些值得注意警告可以在公众号留言分享给大家。

1.1K30

干货 | 携程百亿级缓存系统探索之路——本地缓存结构选型与内存压缩

本文主要讨论酒店查询服务技术团队是如何在保证读取效率前提下,针对存储在服务器本地缓存数据进行存储结构选型以及优化过程。...因此,即使需要存储是整型等基础类型,也将其不得不转换为对应包装类型来存储在内存。这不仅会有存取时产生额外装拆箱性能损耗,存储包装类相较基础类型也会产生更大内存开销。...1)使用位图编码对可枚举字段进行数据压缩 我们房型数据实体上包括布尔型、枚举以及部分字符串等所有可以枚举字段进行了位图编码,大幅降低了单个实体占存大小。...2)使用差值编码处理日期 因为在绝大部分情况下,数据字典日期均为连续,且从业务场景上来说最大日期也不会过大,因此我们采用差值编码处理日期,数据字典日期替换为与服务器启动日期之间相差天数偏移量...在下图数据样例,因为价格数组长度为3,即存在3种可能价格,因此int转换为2个bit进行存储,则位图一天偏移步长为2。

1.1K20

干货 | 携程百亿级缓存系统探索之路——本地缓存结构选型与内存压缩

本文主要讨论酒店查询服务技术团队是如何在保证读取效率前提下,针对存储在服务器本地缓存数据进行存储结构选型以及优化过程。...因此,即使需要存储是整型等基础类型,也将其不得不转换为对应包装类型来存储在内存。这不仅会有存取时产生额外装拆箱性能损耗,存储包装类相较基础类型也会产生更大内存开销。...1)使用位图编码对可枚举字段进行数据压缩 我们房型数据实体上包括布尔型、枚举以及部分字符串等所有可以枚举字段进行了位图编码,大幅降低了单个实体占存大小。...2)使用差值编码处理日期 因为在绝大部分情况下,数据字典日期均为连续,且从业务场景上来说最大日期也不会过大,因此我们采用差值编码处理日期,数据字典日期替换为与服务器启动日期之间相差天数偏移量...在下图数据样例,因为价格数组长度为3,即存在3种可能价格,因此int转换为2个bit进行存储,则位图一天偏移步长为2。

95130

Protobuf3语法详解

64位或者无符号32位整型在解码时被表示成为ilong,但是在设置时可以使用int型值设定,在所有的情况下,值必须符合其设置其类型要求。...在反序列化过程,无法识别的枚举值会被保存在消息,虽然这种表示方式需要依据所使用语言而定。在那些支持开放枚举类型超出指定范围之外语言中(例如C++和Go),为识别的值会被表示成所支持整型。...在使用封闭枚举类型语言中(Java),使用枚举一个类型来表示未识别的值,并且可以使用所支持整型来访问。在其他情况下,如果解析消息被序列号,未识别的值保持原样。...关于如何在应用程序消息中使用枚举更多信息,请查看所选择语言generated code guide 使用其他消息类型 你可以将其他消息类型用作字段类型。...int32, uint32, int64, uint64,和bool是全部兼容,这意味着可以这些类型一个转换为另外一个,而不会破坏向前、 向后兼容性。

5.4K62

数据库避坑指南:MySQL里那些常见错误设计规范,你中了几个?

但是在海量互联网业务设计标准,并不推荐用 DECIMAL 类型,而是更推荐 DECIMAL 转化为整型类型。 也就是说,金融类型更推荐使用用分单位存储,而不是用元单位存储。...1元在数据库中用整型类型 100 存储。...,在数据设计,定长存储性能更好 使用 bigint 存储分为单位金额,也可以存储千兆级别的金额,完全够用 枚举字段使用 错误设计规范:避免使用 ENUM 类型 在以前开发项目中,遇到用户性别,商品是否上架...,不需要使用enum枚举字段类型 而且我们一般在定义枚举时候使用"Y","N"等单个字符,并不会占用很多空间。...但是如果选项值固定情况,随着业务发展可能会增加,才推荐使用枚举字段

99020

放弃fastjson,拥抱Jackson

json object操作 序列化操作 反序列化 日期类型反序列化 自定义反序列化 枚举类型反序列化 背景 最近由于阿里fastjson频繁爆出安全漏洞,为了避免后续升级上线烦恼,决定弃用fastjson...,使用Jackson,把现有项目中fastjson都换成了Jackson,由于很多写法上有些不同,所以在这里把这些改过东西做一下笔记。...,我们可以使用下面的方法来构造ObjectNode和ArrayNode,类似fastjsonJSONObject和JSONArray。...和int类型没有什么疑问,我们这里涉及了两个特殊类型,一个是Date,还有一个是枚举。...最后我们讲一下枚举类型反序列化 如下代码所示,我们通过注解@JsonCreator来处理枚举反序列化,该方法接收一个int类型参数,也就是枚举value值,返回枚举类型GENDER。

1.3K20

Jackson用法详解

Java对象属性 默认情况下,Jackson通过JSON字段名称与Java对象getter和setter方法进行匹配,JSON对象字段映射到Java对象属性。...Java基本数据类型不能为null值。 默认情况下,Jackson ObjectMapper会忽略原始字段空值。 但是,可以Jackson ObjectMapper配置设置为失败。...6、转换JsonNode字段 Jackson JsonNode类包含一组可以字段值转换为另一种数据类型方法。 例如,String字段值转换为long或相反。...@JsonCreator注解在无法使用@JsonSetter注解情况下很有用。 例如,不可变对象没有任何设置方法,因此它们需要将其初始值注入到构造函数。...我们还必须注解构造函数参数,以告诉JacksonJSON对象哪些字段传递给哪些构造函数参数

15K21

Jackson常用注解详解1 初级2 中级

firstName" : "Bob" } 而不是: { "_first_name" : "Bob"} ②忽略属性时使用注解 有时POJO包括了一些你希望输出属性,在这种情况下,你可以进行如下操作...在有些情况下,Jackson在读入或输出一个成员属性时,所选用类型可能并不是你想要: 当读取(反序列化)时,声明类型可能是一个基本类型,但是你确切地知道应该使用实现类型(ps:也就说,我们需要反序列化后生成对象是实现类型...在默认情况下,当由JSON数据创建相应类实例时,Jackson尝试使用该类“默认”构造器(即无参数构造器)。..._x = x; _y = y; } } 使用相同方式,可以@JsonCreator用在静态工厂方法上。...我们可以通过在“基本类型”上添加@JsonTypeInfo注解来完成操作: //Java类名称(“com.myempl.ImplClass”)存储到JSON一个名称为“class”属性 @JsonTypeInfo

1.4K61

jackson注解

json格式串处理了网络流需要知道消息边界信息。而在redis存储需要是把任何type对象转化成string。所以需要进行一系列序列化和反序列化转换。...2.1 JsonProperty和JsonCreator JsonCreator和JsonProperites搭配使用 2.1.1 JsonProperty:设置序列化/反序列化名字映射关系,映射class...JsonCreator最常用还是和 JsonProperty使用,当然它也可以跟JsonValue搭配或者和JacksonInject搭配。...同时 这里其实还有看到几个可以设置选项: image.png required:是否可忽略没有这个字段 access:可读写/只读/只写 defaultValue:默认值 3.2 JsonCreator.java...其他JsonIgnore.java 序列化到网络,不想输出 public class Value { public int value; @JsonIgnore

1.8K381

这是一份很有诚意 Protocol Buffer 语法详解

,则默认为把.proto文件名转换为首字母大写来生成 // .proto文件名="my_proto.proto",默认情况下,将使用 "MyProto" 做为类名 option optimize_for...枚举类型定义可在一个消息对象内部或外部 // 2. 都可以在 同一.proto文件 任何消息对象里使用 // 3....枚举常量必须在32位整型范围内 // 2....推荐在enum中使用负数:因为enum值是使用可变编码方式,对负数不够高 额外说明 当对一个 使用枚举类型.proto文件 使用 Protocol Buffer编译器编译时,生成代码文件...,否则会导致数据不一致;可以通过为新项目定义一个可扩展标识号规则来防止该情况发生 } 要访问 扩展字段 方法与 访问普通字段 不同:使用专门扩展访问函数 实例: // 如何在C++设置 bar

1.3K40

客快物流大数据项目(八十九):ClickHouse数据类型支持

例如,固定精度数字转换为整数值,例如货币数量或页面加载时间用毫秒为单位表示。...Enum字符串和数值都不允许为NULL,当声明表字段使用Nullable类型包含Enum类型时,在插入数据时允许NULL值。...Enum类型可以使用Alter无成本修改对应集合值,可以使用Alter来添加或删除Enum成员(出于安全保障,如果改变之前用过Enum会报异常),也可以用AlterEnum8换为Enum16或反之...T要求是兼容数据类型,因为ClickHouse会自动检测并根据元素内容计算出存储这些数据最小数据类型,:不能使用array(1,’hello’)。...Nullable字段不能作为索引列使用,在ClickHouse存储Nullable列时,会对性能产生一定影响。默认情况下字段是不允许为NULL

2.7K51

GoLang字符串一些使用总结

“ 在项目当中接触到最多应该就是字符串了,比如在写API时收到前台发来请求,大部分我相信都是字符串,我们接下来就针对字符串在GoLang一些处理做个小小总结。...,那就要用到格式化了,和其他C语言啥都类似,这里我列一下这些动词和功能具体参数: 动词功能%v按照值本来值输出%+v在%v基础上,对结构体字段名和1值进行展开%#v输出Go语言语法格式值%T输出...Go语言-语法格式类型和值%%输出%本体%b整型以二进制方式显示%。...整型以八进制方式显示%d整型以十进制方式显示%x整型以十六进制方式显示%X整型以十六进制、字母大写方式显示%UUnicode字符%f浮点数%p指针,十六进制方式显示 有些我们不常用,可以先记住他,用到了再来查也可以...02 — 字符串类型转换 当我们收到客户端发来请求时,大部分数据都是需要我们二次处理才能使用,比如把字符串int,int64等接下来咱们看看Go里面怎么

1.1K20

Carson带你学序列化:这是一份很有诚意 Protocol Buffer 语法详解

,则默认为把.proto文件名转换为首字母大写来生成 // .proto文件名="my_proto.proto",默认情况下,将使用 "MyProto" 做为类名 option optimize_for...枚举类型定义可在一个消息对象内部或外部 // 2. 都可以在 同一.proto文件 任何消息对象里使用 // 3....枚举常量必须在32位整型范围内 // 2....推荐在enum中使用负数:因为enum值是使用可变编码方式,对负数不够高 额外说明 当对一个 使用枚举类型.proto文件 使用 Protocol Buffer编译器编译时,生成代码文件:...,否则会导致数据不一致;可以通过为新项目定义一个可扩展标识号规则来防止该情况发生 } 要访问 扩展字段 方法与 访问普通字段 不同:使用专门扩展访问函数 实例: // 如何在C++设置 bar

72960

Java如何优雅地实现接口数据校验

@NotNull注解来约束该字段必须不能为空,也可以使用@Min注解来约束字段最小取值,或者还可以通过@Pattern注解来使用正则表达式来约束字段格式(手机号格式)等等。...在“hibernate-validator”依赖jar包,虽然提供了很多很方便约束注解,但是也有不满足某些实际需要情况,例如我们想针对参数某个值约定其值枚举范围,orderType订单类型只允许传...此外,如果对这样枚举值,我们还想在约束定义中直接匹配代码枚举定义,以更好地统一接口参数与业务逻辑枚举定义。那么这种情况下,我们还可以自己扩展定义相应地约束注解逻辑。...* 定制化注解,支持参数值与指定类型数组列表值进行匹配(缺点是需要将枚举值写死在字段定义注解) */ @EnumValue(strValues = {"pay", "refund"}, message...除了上面直接在Controller层使用@Validated进行绑定数据校验外,在有些情况,例如你参数对象某个字段是一个复合对象,或者业务层某个方法所定义入参对象也需要进行数据合法性校验,那么这种情况下如何实现像

1.1K30

Protobuf 语法指南

如果在某些情况下不想写入或者发送一个required字段原始该字段修饰符更改为optional可能会遇到问题——旧版本使用者会认为不含该字段消息是不完整,从而可能会无目的拒绝解析。...对数值类型来说,默认值是0。对枚举来说,默认值是枚举类型定义第一个值。 1.9 枚举 当需要定义一个消息类型时候,可能想为一个字段指定某“预定义值序列”一个值。...因为enum值是使用可变编码方式,对负数不够高效,因此推荐在enum中使用负数。如上例所示,可以在 一个消息定义内部或外部定义枚举——这些枚举可以在.proto文件任何消息定义里重用。...2.4 更新一个消息类型 如果一个已有的消息格式已无法满足新需求——,要在消息添加一个额外字段——但是同时旧版本写代码仍然可用。不用担心!更新消息而破坏已有代码是非常简单。...int32, uint32, int64, uint64,和bool是全部兼容,这意味着可以这些类型一个转换为另外一个,而不会破坏向前、 向后兼容性。

4K20
领券