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