我有下面的枚举声明
public enum FamilyType {
FIRSTNAME("firstname"),
LASTNAME("lastname");
private final String type;
FamilyType(String type) {
this.type = type;
}
public static FamilyType fromString(String type) {
for (FamilyType t : FamilyType.values()) {
if (t.type.equals(type)) {
return t;
}
}
return converter(type);
}
@Deprecated
private static FamilyType converter(String value) {
if ("NICKNAME".equalsIgnoreCase(value)) {
return FIRSTNAME;
}
if ("SURENAME".equalsIgnoreCase(value)) {
return LASTNAME;
}
throw new InvalidFileNameException("my-enum", value);
}
}
我有一个控制器endpoint,其中删除请求将FamilyType
保存为Request estparam
,如下所示
public String deleteFamilyType(@PathVariable String userId, @Valid @RequestParam FamilyType familyType) {
从邮递员发送时,familytype=firstname有效,但如果发送familytype=昵称,则我的转换器返回
org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:
Failed to convert value of type 'java.lang.String' to required type 'FamilyType';
nested exception is java.lang.IllegalArgumentException:
No enum constant FamilyType.NICKNAME
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:133)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.
在本教程第3节之后,我们可以使用自定义转换器覆盖默认的转换。
public class StringToFamilyTypeConverter implements Converter<String, FamilyType> {
@Override
public FamilyType convert(String source) {
if ("NICKNAME".equalsIgnoreCase(source)) {
return FamilyType.FIRSTNAME;
}
if ("SURENAME".equalsIgnoreCase(source)) {
return FamilyType.LASTNAME;
}
return FamilyType.valueOf(source.toUpperCase());
}
}
然后将转换器添加到MVC配置中
@Configuration
public class AppConfig implements WebMvcConfigurer {
// ...
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new StringToFamilyTypeConverter());
}
// ...
}
问题内容: 我有一个返回int类型的函数。但是,我只有TAX枚举的值。 如何将TAX枚举值转换为整数? 问题答案: 您需要以某种方式使枚举公开,例如 (顺便说一句,我将名称更改为更常规和易读。) 这是 假设 您要在构造函数中分配值。如果这不是您想要的,则需要向我们提供更多信息。
问题内容: 我有一个第三方图书馆给我一个图书馆。我想像Java 8那样懒惰地使用该枚举,并调用诸如此类的东西。 有没有现成的图书馆?我已经在引用Guava和Apache Commons,所以如果其中任何一个都有理想的解决方案。 另外,在保留所有内容的懒惰性质的同时将a 变成最佳/最简单的方法是什么? 问题答案: 这个答案已经提供了一个解决方案,可以解决以下问题: 应当强调的是,由此而来 的 懒任何
问题内容: 我有一些Java代码,我想将其翻译为C#。srcParams是一个哈希表。 这是Java代码: 这是我在C#中的尝试 你能告诉我是否正确吗? 问题答案: 您所拥有的几乎可以了,只需重命名变量并添加的使用即可:
我有一个第三方库,它给我一个。我希望将该枚举作为Java8来使用,在其上调用诸如、和之类的东西。 是否有一个现有的库中包含此内容?我已经引用了Guava和Apache Commons,所以如果其中任何一个都有理想的解决方案。 或者,将转换为同时保留所有内容的惰性的最佳/最简单的方法是什么?
我在TypeScript中定义了以下枚举: 现在在我的函数中,我接收颜色作为字符串。我已经尝试了以下代码: 如何将该值转换为枚举?
问题内容: 鉴于以下枚举: 如何从下面的常量获取字符串? 问题答案: 不确定此功能是在哪个Swift版本中添加的,但是现在( Swift 2.1 )您只需要以下代码: 如果将字符串用于原始值,则每种情况的隐式值都是该 情况名称 的 文本 。 […] 在上面的示例中,CompassPoint.south的隐式原始值为“ south”,依此类推。 您可以使用其rawValue属性访问枚举用例的原始值: