如何在春季启动项目中使用枚举

  介绍

如何在春季启动项目中使用枚举?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1。在控制器的方法中,比如以这个枚举为参数,如下代码:

@RequestMapping (“/* *”)   public 才能;String  getRejectReasons (EnumExpenseType 类型),{   ,,,return ““;   以前,,}

前台传入的参数如果是类型:1,那它值应该是:小欢喜,实际上呢?

Caused :, java.lang.IllegalArgumentException: No  enum  constant  com。* * .EnumReasonType。1 at  java.lang.Enum.valueOf (Enum.java: 238), ~ (?: 1.8.0_111] at  org.springframework.core.convert.support.StringToEnumConverterFactory StringToEnum.convert美元(StringToEnumConverterFactory.java: 52), ~ (spring-core-5.1.8.RELEASE.jar: 5.1.8。发布]at  org.springframework.core.convert.support.StringToEnumConverterFactory StringToEnum.convert美元(StringToEnumConverterFactory.java: 38), ~ (spring-core-5.1.8.RELEASE.jar: 5.1.8。发布]at  org.springframework.core.convert.support.GenericConversionService ConverterFactoryAdapter.convert美元(GenericConversionService.java: 436), ~ (spring-core-5.1.8.RELEASE.jar: 5.1.8。发布]at  org.springframework.core.convert.support.ConversionUtils.invokeConverter (ConversionUtils.java: 41), ~ (spring-core-5.1.8.RELEASE.jar: 5.1.8。发布]at  org.springframework.core.convert.support.GenericConversionService.convert (GenericConversionService.java: 191), ~ (spring-core-5.1.8.RELEASE.jar: 5.1.8。发布]at  org.springframework.beans.TypeConverterDelegate.convertIfNecessary (TypeConverterDelegate.java: 129), ~ (spring-beans-5.1.7.RELEASE.jar: 5.1.7。发布]at  org.springframework.beans.TypeConverterSupport.convertIfNecessary (TypeConverterSupport.java: 73), ~ (spring-beans-5.1.7.RELEASE.jar: 5.1.7。发布]at  org.springframework.beans.TypeConverterSupport.convertIfNecessary (TypeConverterSupport.java: 53), ~ (spring-beans-5.1.7.RELEASE.jar: 5.1.7。发布]at  org.springframework.validation.DataBinder.convertIfNecessary (DataBinder.java: 693), ~ (spring-context-5.1.7.RELEASE.jar: 5.1.7。发布]at  org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument (AbstractNamedValueMethodArgumentResolver.java: 124), ~ (spring-web-5.1.7.RELEASE.jar: 5.1.7。释放)……,81,

未能转换类型的值& # 39;以# 39;所需类型& # 39;com。* * .EnumExpenseType& # 39;;
org.springframework.core.convert嵌套异常。ConversionFailedException:
未能从类型转换(. lang。字符串][com类型。* *。EnumExpenseType]值& # 39;1 & # 39;;
. lang是嵌套的例外。com IllegalArgumentException:不枚举常数。* * * .EnumExpenseType。1

实际上它却报了个错。转换失败了。

查看报错信息,可以定位到是春天框架中StringToEnumConverterFactory中转换失败,具体代码如下:

private  static  class  StringToEnum, implements  Converter<字符串,T>, {      ,,,private  final  Class, enumType;      ,,,public  StringToEnum (Class

是Enum.valueOf这里报的错,Enum.valueOf的后面的值并不是我们的价值,而名字是(这里的小欢喜)。

所以,我们不能使用这个春天提供转换器,需要自定义一个:StringToEnumConverterFactory

public  class  StringToEnumConverterFactory  implements  ConverterFactory<字符串,,BaseEnum>, {      private 才能static  final  Map<类,,Converter>, converterMap =, new  HashMap<在();      @Override才能   public 才能;& lt; T  extends  BaseEnum>, Converter<字符串,T>, getConverter (Class, converter =, converterMap.get (targetType);   ,,,如果(converter ==, null), {   ,,,,,converter =, new  StringToEnumConverter<祝辞(targetType);   ,,,,,converterMap.put (targetType,转换器);   ,,,}   ,,,return 变频器;   ,,}      null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在春季启动项目中使用枚举