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

网站开发文件夹组织结构中国建设银行的官方网址

网站开发文件夹组织结构,中国建设银行的官方网址,公司网站制作排名,乌克兰俄罗斯最新消息在日常的项目开发中经常会遇到一些取值范围固定的字段#xff0c;例如性别、证件类型、会员等级等#xff0c;此时我们可以利用枚举来最大程度减少字段的乱定义#xff0c;统一管理枚举的值。 SpringMVC中对于枚举也有默认的处理策略#xff1a; 对于RequestParam#xf…在日常的项目开发中经常会遇到一些取值范围固定的字段例如性别、证件类型、会员等级等此时我们可以利用枚举来最大程度减少字段的乱定义统一管理枚举的值。 SpringMVC中对于枚举也有默认的处理策略 对于RequestParamSpring是通过ConverterFactory来处理的大致处理策略是根据枚举名称或枚举下标来转换枚举。 对于RequestBodySpring是通过Jackson配置将json内的枚举值转换为对象的大致处理策略同样是根据枚举名称或枚举下标来转换枚举。 在SpringMVC内对枚举的默认处理逻辑是根据枚举的类名或枚举下标来将请求参数转化为枚举对象这显然不太灵活因此我们需要调整枚举字段的处理逻辑。 RequestParam处理 我们可以自定义ConvertFactory来自定义枚举字段的转化策略。 定义BaseEnum接口规定所有枚举都应该实现此接口 public interface BaseEnumT {/*** 获取枚举值*/T getCode();/*** 根据值获取对应的枚举* param enumTypeClazz 枚举类型类* param value 值*/static T extends BaseEnum T getEnumByCode(ClassT enumTypeClazz, Object value) {if (enumTypeClazz null || value null) {return null;}OptionalT optional Arrays.stream(enumTypeClazz.getEnumConstants()).filter(e -{Object enumCode e.getCode();return Objects.equals(Convert.convert(enumCode.getClass(), value),enumCode);}).findFirst();//如果不存在则抛异常return optional.orElseThrow( ()- new RuntimeException([ enumTypeClazz.getSimpleName() ]参数错误[ value ]));} } 自定义ConverterFactory Component public class EnumConverterFactory implements ConverterFactoryString, BaseEnum {Overridepublic T extends BaseEnum ConverterString, T getConverter(ClassT targetType) {return source - BaseEnum.getEnumByCode(targetType, source);} }注册ConverterFactory Configuration public class SpringMVCConfig implements WebMvcConfigurer {Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverterFactory(new EnumConverterFactory());}}这样配置后请求参数就会自动转换为枚举了。 //枚举类 AllArgsConstructor Getter public enum Gender implements BaseEnumInteger {MALE(1,男),FEMALE(2,女),;EnumValueprivate Integer code;private String value;}//通过接口接受gender参数能够根据code自动转换为对应的枚举 GetMapping(/test) public Gender insert(Gender gender) {return gender; }RequestBody处理 RequestBody是通过Jackson转换对请求参数进行处理的因此我们只需要自定义反序列化类即可 自定义序列化规则设置json内的值如何转换为枚举 public class EnumDeserializer extends JsonDeserializerBaseEnum {/*** 根据参数值获取对应的枚举* throws IOException* throws JacksonException*/Overridepublic BaseEnum deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException {// 当前值final String paramValue p.getText();//获取序列化信息final JsonStreamContext parsingContext p.getParsingContext();// 获取当前序列化的类的对象final Object currentValue parsingContext.getCurrentValue();//获取当前序列化的字段名final String currentName parsingContext.getCurrentName();try {// 反射获取当前序列化字段信息final Field declaredField currentValue.getClass().getDeclaredField(currentName);// 通过字段信息获取对应的枚举的Classfinal ClassBaseEnum targetType (ClassBaseEnum) declaredField.getType();//根据参数值获取对应的枚举BaseEnum baseEnum BaseEnum.getEnumByCode(targetType, paramValue);if (ObjectUtil.isEmpty(baseEnum)) {throw new RuntimeException([ currentName ]参数错误);}//返回枚举return baseEnum;} catch (NoSuchFieldException e) {throw new RuntimeException([ currentName ]参数错误);}}}在枚举类加上 JsonDeserialize(using EnumDeserializer.class) //可以直接加到刚刚定义的BaseEnum接口上这样所有枚举就自动继承了JsonDeserialize(using EnumDeserializer.class)public interface BaseEnumT {……}这样配置后RequestBody就能够自动转换枚举了 PostMapping(/save) public User save(RequestBody User user) {studentService.save(user);return user; }枚举字段返回序列化 如果我们返回的对象内有枚举字段SpringMVC会默认将枚举的名称作为值返回如果我们想指定枚举类的某个属性作为值可以通过JsonValue指定 AllArgsConstructor Getter public enum Gender implements BaseEnumInteger {MALE(1,男),FEMALE(2,女),;//指定转json时使用code作为值JsonValueprivate Integer code;private String value;}或者直接在枚举类上加JsonFormat将枚举转换为对象格式 JsonFormat(shape JsonFormat.Shape.OBJECT) JsonDeserialize(using EnumDeserializer.class) public interface BaseEnumT {…… }MybatisPlus对枚举的处理 MybatisPlus直接在枚举类的属性上加EnumValue即可并且兼容xml内的动态sql AllArgsConstructor Getter public enum Gender implements BaseEnumInteger {MALE(1,男),FEMALE(2,女),;//指定code作为入库时的值EnumValueprivate Integer code;private String value;}
http://www.w-s-a.com/news/78016/

相关文章:

  • 鄂州官方网站食品网站建设需求分析
  • 福州网站建设金森要做好网络营销首先要
  • 中山哪里有好网站建设公司企业培训考试平台下载
  • 域名备案查询 网站备案查询企业网站建设问题研究
  • wordpress无法编辑北京优化网站方法
  • 公司建设一个网站最好的网站建设哪家好
  • 南京市住宅建设总公司网站wordpress 自己写的网页
  • 淄博网站制作企业高端长沙企业网站制作服务报价
  • 网站服务理念中外商贸网站建设
  • 如何自己建立网站中国建设银行网站忘记密码
  • 什么是a站如何在12366网站上做实名认证
  • 斗蟋蟀网站建设谭谭心怎么建设网站
  • 优秀网站开发商郑州网站建设套餐
  • 做伤残鉴约号网站购物网站建设新闻
  • 黄江网站建设公司自己房子做民宿挂什么网站
  • 手游网站做cpc还是cpm广告号宣武郑州阳网站建设
  • vs连接数据库做网站建立网站
  • 电商网站设计图片素材p2p网站建设石家庄
  • 莲塘网站建设如何文字推广一个婚恋网站
  • 医院网站建设工作汇报WordPress不发邮件了
  • 怎么做外语网站个人网页设计作品ps
  • 网站原型怎么做vps如何建两个网站
  • 商城网站建设源码嘉兴seo计费管理
  • 城乡建设网站证件查询系统wordpress 时间代码
  • php网站建设 关键技术做网站哪家正规
  • 网站开发用什么写得比较好谷歌的英文网站
  • 青岛网站建设公司在哪vivo手机商城
  • 兼职刷客在哪个网站做哪个网站做淘宝客
  • 眼科医院网站开发网络营销特点是什么
  • 提交网站给百度增加wordpress插件