enumconverter.java
来自「pojo的mvc框架」· Java 代码 · 共 80 行
JAVA
80 行
package xyz.frame.converter.basic;import xyz.frame.LogicRequest;import xyz.frame.converter.ConversionException;import xyz.frame.converter.Converter;/** * Basic String to Enumeration converter. If the value begins with a number uses * it as the ordinal position, otherwise uses it as its name. Uses the error key * invalid_value if unable to parse its information. * * @author Guilherme Silveira */public class EnumConverter implements Converter { private static final Class<?>[] SUPPORTED_TYPES = new Class[] { Enum.class }; @SuppressWarnings("unchecked") public Object convert(String value, Class<?> type, LogicRequest context) throws ConversionException { if (value == null || value.equals("")) { return null; } Class<? extends Enum> enumType = (Class<? extends Enum>) type; if (Character.isDigit(value.charAt(0))) { return resolveByOrdinal(value, type, enumType); } else { return resolveByName(value, type, enumType); } } public Class<?>[] getSupportedTypes() { return SUPPORTED_TYPES; } /** * @param value * @param type * @param enumType * @return * @throws ConversionException */ @SuppressWarnings("unchecked") private Object resolveByName(String value, Class<?> type, Class<? extends Enum> enumType) throws ConversionException { try { return Enum.valueOf(enumType, value); } catch (IllegalArgumentException e) { throw new ConversionException("invalid_value", "Invalid enumeration value for type " + type.getName() + " value " + value); } } /** * @param value * @param type * @param enumType * @return * @throws ConversionException */ private Object resolveByOrdinal(String value, Class<?> type, Class<? extends Enum> enumType) throws ConversionException { try { int ordinal = Integer.parseInt(value); if (ordinal >= enumType.getEnumConstants().length) { throw new ConversionException("invalid_value", "Invalid enumeration value for type " + type.getName() + " value " + value); } return enumType.getEnumConstants()[ordinal]; } catch (NumberFormatException e) { throw new ConversionException("invalid_value", "Invalid enumeration value for type " + type.getName() + " value " + value); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?