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

邯郸做网站推广找谁seo的优化流程

邯郸做网站推广找谁,seo的优化流程,建设工程施工合同纠纷案件,有什么网站学做标书的在日常的项目开发中经常会遇到一些取值范围固定的字段,例如性别、证件类型、会员等级等,此时我们可以利用枚举来最大程度减少字段的乱定义,统一管理枚举的值。 SpringMVC中对于枚举也有默认的处理策略: 对于RequestParam&#xf…

在日常的项目开发中经常会遇到一些取值范围固定的字段,例如性别、证件类型、会员等级等,此时我们可以利用枚举来最大程度减少字段的乱定义,统一管理枚举的值。

SpringMVC中对于枚举也有默认的处理策略:

  • 对于@RequestParam,Spring是通过ConverterFactory来处理的,大致处理策略是根据枚举名称或枚举下标来转换枚举。
    在这里插入图片描述

  • 对于@RequestBody,Spring是通过Jackson配置将json内的枚举值转换为对象的,大致处理策略同样是根据枚举名称或枚举下标来转换枚举。

在SpringMVC内对枚举的默认处理逻辑是根据枚举的类名或枚举下标来将请求参数转化为枚举对象,这显然不太灵活,因此我们需要调整枚举字段的处理逻辑。

RequestParam处理

我们可以自定义ConvertFactory来自定义枚举字段的转化策略。

  1. 定义BaseEnum接口,规定所有枚举都应该实现此接口

    public interface BaseEnum<T> {/*** 获取枚举值*/T getCode();/*** 根据值获取对应的枚举* @param enumTypeClazz 枚举类型类* @param value 值*/static <T extends BaseEnum> T getEnumByCode(Class<T> enumTypeClazz, Object value) {if (enumTypeClazz == null || value == null) {return null;}Optional<T> 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 + "]"));}
    }
  2. 自定义ConverterFactory

    @Component
    public class EnumConverterFactory implements ConverterFactory<String, BaseEnum> {@Overridepublic <T extends BaseEnum> Converter<String, T> getConverter(Class<T> targetType) {return source -> BaseEnum.getEnumByCode(targetType, source);}
    }
    
  3. 注册ConverterFactory

    @Configuration
    public class SpringMVCConfig implements WebMvcConfigurer {@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverterFactory(new EnumConverterFactory());}}
    
  4. 这样配置后请求参数就会自动转换为枚举了。

    //枚举类
    @AllArgsConstructor
    @Getter
    public enum Gender implements BaseEnum<Integer> {MALE(1,"男"),FEMALE(2,"女"),;@EnumValueprivate Integer code;private String value;}//通过接口接受gender参数,能够根据code自动转换为对应的枚举
    @GetMapping("/test")
    public Gender insert(Gender gender) {return gender;
    }
    

RequestBody处理

RequestBody是通过Jackson转换对请求参数进行处理的,因此我们只需要自定义反序列化类即可

  1. 自定义序列化规则设置json内的值如何转换为枚举

    public class EnumDeserializer extends JsonDeserializer<BaseEnum> {/*** 根据参数值获取对应的枚举* @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 Class<BaseEnum> targetType = (Class<BaseEnum>) 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 + "]参数错误");}}}
    
    1. 在枚举类加上 @JsonDeserialize(using = EnumDeserializer.class)
       //可以直接加到刚刚定义的BaseEnum接口上,这样所有枚举就自动继承了@JsonDeserialize(using = EnumDeserializer.class)public interface BaseEnum<T> {……}
    
    1. 这样配置后@RequestBody就能够自动转换枚举了
    @PostMapping("/save")
    public User save(@RequestBody User user) {studentService.save(user);return user;
    }
    

枚举字段返回序列化

如果我们返回的对象内有枚举字段,SpringMVC会默认将枚举的名称作为值返回,如果我们想指定枚举类的某个属性作为值,可以通过@JsonValue指定

@AllArgsConstructor
@Getter
public enum Gender implements BaseEnum<Integer> {MALE(1,"男"),FEMALE(2,"女"),;//指定转json时使用code作为值@JsonValueprivate Integer code;private String value;}

或者直接在枚举类上加@JsonFormat,将枚举转换为对象格式

@JsonFormat(shape= JsonFormat.Shape.OBJECT)
@JsonDeserialize(using = EnumDeserializer.class)
public interface BaseEnum<T> {……
}

MybatisPlus对枚举的处理

MybatisPlus直接在枚举类的属性上加@EnumValue即可,并且兼容xml内的动态sql

@AllArgsConstructor
@Getter
public enum Gender implements BaseEnum<Integer> {MALE(1,"男"),FEMALE(2,"女"),;//指定code作为入库时的值@EnumValueprivate Integer code;private String value;}
http://www.yidumall.com/news/3237.html

相关文章:

  • 做黑界头像网站深圳seo招聘
  • 郑州做网站的公司哪家推广赚佣金项目
  • 杭州有哪些外资企业招聘东莞网站关键词优化排名
  • 手机设计软件免费人员优化是什么意思
  • 澳门网站开发招聘东莞seo网站排名优化公司
  • wordpress 适合做小说站吗惠州seo代理计费
  • 网站开发哪里可做私活小网站关键词搜什么
  • 有没有电脑做兼职的网站seo流量软件
  • 动态网站源码下载石家庄网络关键词排名
  • 做网站用采集seo搜索如何优化
  • 有网站加金币的做弊器吗6如何创建网站教程
  • 教育网站开发公司怎样做推广是免费的
  • 建设运营网络或提供网络服务优化快速排名教程
  • 爱站网长尾挖掘工具绍兴seo网站管理
  • 网站设计应该遵循的原则全网推广外包公司
  • 旅游网站开发社会的背景网络优化器
  • 商丘网站开发公司手游推广平台
  • 营销型网站建设案例分析关键词优化网站排名
  • 网站防红链接怎么做站长之家查询网
  • 那个网站可以做全景图公关公司排名
  • 建设一个网站可以采用那几方案搜索引擎优化结果
  • 一个网站的制作特点郑州seo外包阿亮
  • 标志设计欣赏网站太原自动seo
  • 成都专业网站建设公司排名代运营靠谱吗
  • 做网站不给钱网站统计分析工具的主要功能
  • 建设工程施工证哪个网站查询外贸建站推广公司
  • 看剧资源网站怎么做的seo推广的方法
  • 个体工商户可以做网站吗网络推广渠道都有哪些
  • 网站建设越来越注重用户体验怎样申请自己的电商平台
  • 网站做浮动边框asp代码最新新闻热点话题