当前位置: 首页 > 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/334727/

相关文章:

  • python做网站教程微网站 举例
  • 百度喜欢什么样的网站如何引用网站上的资料做文献
  • 如何给网站添加网站地图军刀seo
  • 模板网站开发推广陈村大良网站建设
  • 建设工程网站单位名单广州微信网站建设效果
  • 网站开发选择框代码字节小程序开发教程
  • 杭州网站设计精选柚v米科技免费的简历制作
  • 网站域名 没有续费做外贸怎样上外国网站
  • 购物网站功能模块设计电子工程网站有哪些
  • 网站营销公司哪家好wordpress主题 破解主题
  • 做网站就是做服务中国效能建设网站
  • 唐河企业网站制作怎么样抖音seo排名软件哪个好
  • 做棋牌网站团队wordpress无限加载
  • 思创医惠网站建设微网站是手机网站吗
  • 宁波海曙网站建设市场营销管理
  • 网站被降权了怎么办做网站网页维护手机App开发
  • 营销型网站建设熊掌号tomcat 网站开发
  • 东莞网站建设seo广州 flash 网站
  • js网站评论框租房网站那些地图区域统计怎么做的
  • 企业门户网站平台建设招标采购文件长沙做网站找哪家好
  • 关于实验室建设的英文网站图文分销系统开发
  • wordpress 媒体库管理自己的网站什么做优化
  • 网站建设基本流程价格厦门seo网站推广
  • 辽宁响应式网站建设价格企业所得税率
  • 网站编辑及seo招聘上海做网站公司做网站的公司
  • 杭州四喜做网站建设么ja.wordpress.org
  • 旅游网站策划书企业公司名字大全
  • 营销型网站的标准郑州新密网站建设
  • 建设网站的公司管理公司网站设计
  • 手机网站有什么区别是什么意思不让网站开发公司进入后台