枚举优雅处理方式

springboot-fw 框架第一弹:枚举优雅的处理方式


你还在为系统中存在魔数而找不到意义而烦恼么?
你还在为数据库存的数值对应java的Interger不知道什么意思而抓狂么?
你还在用Interger前后端传值转化枚举而做重复的代码么?

快来使用枚举转化器吧:跟枚举无关的代码例子中都进行了注释

导入方式:

1.直接使用傻瓜全能包(推荐新手玩家使用,推荐使用新项目,封装的功能较多)

<dependency>
  <groupId>io.gitee.chearnee.fw</groupId>
  <artifactId>fw-web-spring-boot-starter</artifactId>
  <version>0.0.1</version>
</dependency>

介绍:自动开启:统一返回对象处理;LocalDateTIme 系统内外传输正反序列化成时间戳,支持RequestBody方式,RequestParam和PathVariable方式;枚举正反序列化等等等;

2.自定义使用(推荐老玩家使用,自定义加载使用工具,不影响老的项目)

<dependency>
  <groupId>io.gitee.chearnee.fw</groupId>
  <artifactId>fw-common-tools</artifactId>
  <version>0.0.1</version>
</dependency>

介绍:自定义导入,需要手动加到springboot的序列化器中(我这里使用的springboot自带的jackson序列化工具,如果大家使用其他序列化工具,请自行修改)

@Configuration
public class JacksonBaseConfig {

  private static void customize(Jackson2ObjectMapperBuilder builder) {
    builder
     //.serializerByType(LocalDateTime.class,
      //      new CustomLocalDateTimeSerializer())
      //  .deserializerByType(LocalDateTime.class,
       //     new CustomLocalDateTimeDeserializer())
        //枚举序列化
        .serializerByType(IBaseEnum.class, new BaseEnumSerializer())
        //枚举反序列化
        .deserializerByType(IBaseEnum.class, new BaseEnumDeserializer())
    ;
  }

  @Bean
  public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
    return JacksonBaseConfig::customize;
  }
}
@Configuration
public class MvcBaseConfig implements WebMvcConfigurer {

   // @Autowired(required = false)
    //private Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder;

    @Override
    public void addFormatters(FormatterRegistry registry) {
      //param 和 path反序列化
      registry.addConverterFactory(new StringToBaseEnumConverterFactory());
      //registry.addConverter(new StringToLocalDateTimeConverter());
    }

    //@Override
    //public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
      //List<HttpMessageConverter<?>> collect = converters.stream()
          //.filter(MappingJackson2HttpMessageConverter.class::isInstance).collect(
    //         Collectors.toList());
      //converters.removeAll(collect);
      //converters.add(new MappingJackson2HttpMessageConverter(jackson2ObjectMapperBuilder.build()));
    }
}

使用方式:

在java中使用枚举的时候,实现IBaseEnum接口就大功告成,
在要进行正反序列化的枚举值上加上@IBaseEnumJson注解,就会以此枚举值来进行正反序列化操作,如果不加@IBaseEnumJson注解,默认以IBaseEnum的getValue来进行操作。
例子:

@Getter
@AllArgsConstructor
public enum SexEnum implements IBaseEnum<Integer> {
    UNKNOWN(0, "未知"),
    FEMALE(1, "女"),
    MALE(2, "男"),
    ;
    //这个为mybatis plus存储到数据库的枚举值
    @EnumValue
    //这个为正反序列化系统内外的枚举值,如果没有写这个默认正反序列化  getValue()
    @IBaseEnumJson
    private final Integer value;
    private final String desc;
}

由于我们orm主要用mybatis plus,它自带有数据库枚举处理,所以就没有写数据库的枚举值处理,推荐大家使用mybatis plus吧,链接:Myabtis plus 通用枚举处理

通过上述的方式进行处理,在整个系统中就不会出现整型转化枚举,枚举转换整型等问题,整个系统中直接使用枚举进行操作,又少了一些魔数的产生。
今天就主要介绍枚举的处理,后续还有其他提升开发效率的工具介绍。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
@ExceptionHandler注解是用来定义具体的异常处理方法的,用法是在Controller层中的任意一个方法上使用该注解,当该方法中抛出对应的异常时,就会执行对应的处理方法。 @ControllerAdvice注解是一个全局异常处理器,可以用来统一处理所有Controller层中抛出的异常,它可以定义一个或多个@ExceptionHandler方法,用来捕获不同的异常并进行统一处理。 而枚举实现全局异常统一处理可以通过定义一个枚举类来实现,每个枚举值代表一种错误类型,包括错误码和错误信息。在@ControllerAdvice中,可以定义一个@ExceptionHandler方法,在该方法中根据不同的异常类型和错误码返回对应的错误信息。这样,当有异常抛出时,就会根据所对应的错误类型和错误码返回对应的错误信息。 例如: ``` @RequiredArgsConstructor @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = BusinessException.class) @ResponseBody public ApiResponse handleBusinessException(BusinessException e) { return ApiResponse.fail(e.getErrorCode(), e.getMessage()); } } @AllArgsConstructor @Getter public enum ErrorCode { SUCCESS("00000", "操作成功"), UNKNOWN_ERROR("-1", "系统繁忙,请稍后再试"),; private String code; private String message; } ``` 在上面的代码中,我们定义了一个枚举类ErrorCode,它包含了成功和未知错误两种类型的错误码和错误信息。我们在GlobalExceptionHandler类中定义了一个handleBusinessException方法,用来处理BusinessException异常,该方法返回一个ApiResponse对象,其中使用了e.getErrorCode()和e.getMessage()方法获取异常的错误码和错误信息,并返回给前端。 如此一来,我们就可以实现全局异常统一处理,并且在ApiException和BusinessException中添加对应的错误码和错误信息,方便日后维护和管理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值