Java 在web界面中获取枚举类型的值
我已经实现了一个枚举类。下面是代码:Java 在web界面中获取枚举类型的值,java,spring,Java,Spring,我已经实现了一个枚举类。下面是代码: public enum OfferType { NO_OFFER("Pas d'offre", "N/A"), LOCAL("Offre locale", "LOCAL"), NATIONAL("Offre nationale", "NATIONAL"), DEFAULT("DEFAULT", "DEFAULT"); // private static Logger logger = LoggerF
public enum OfferType {
NO_OFFER("Pas d'offre", "N/A"),
LOCAL("Offre locale", "LOCAL"),
NATIONAL("Offre nationale", "NATIONAL"),
DEFAULT("DEFAULT", "DEFAULT");
// private static Logger logger = LoggerFactory.getLogger(OfferType.class);
public final String frontLabel;
public final String daoField;
OfferType(String frontLabel, String daoField) {
this.frontLabel = frontLabel;
this.daoField = daoField;
}
public static OfferType getEnum(String daoField) {
if (NO_OFFER.daoField.equals(daoField)){
return NO_OFFER;
}
if (LOCAL.daoField.equals(daoField)){
return LOCAL;
}
if (NATIONAL.daoField.equals(daoField)){
return NATIONAL;
}
//logger.error("Unknown enum value: " + daoField);
throw new IllegalArgumentException("No Enum specified for this string:"+daoField);
}
}
我使用类型为“OfferType”的属性定义了一个类顺序。
我应该实例化一个对象“order”,并将此属性设置为该对象,如下所示:
order.setOfferType(OfferType.getEnum((rs.getString("offerType"))));
问题是,使用此设置时,我将使用枚举的大写值。我希望取而代之的是检索枚举的第一个值。如何执行此操作
提前感谢Spring使用默认的jackson序列化程序。因此,为了进行自定义序列化,您应该对字段进行注释:
@JsonSerialize(using = OfferTypeSerializer.class)
private OfferType offerType;
并创建OfferTypeSerializer.class:
public class OfferTypeSerializer extends JsonSerializer<OfferType> {
@Override
public void serialize(OrderType value, JsonGenerator jgen,
SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeString(value.frontLabel);
}
}
如果要调用getEnum(String daoField)
获取数据,则应将其写入下一个表单:
public static String getEnumFrontLabel(String daoField) {
if (NO_OFFER.daoField.equals(daoField)){
return NO_OFFER.frontLabel;
}
if (LOCAL.daoField.equals(daoField)){
return LOCAL.frontLabel;
}
if (NATIONAL.daoField.equals(daoField)){
return NATIONAL.frontLabel;
}
实际上,最好使用下一种形式的返回枚举:
public static String getEnumFrontLabel(String daoField) {
OfferType t = getType(field);
if (t != null) {
return t.frontLabel;
}
return null;
}
public static OfferType getType(String field) {
for (OfferType type : values()) {
if (type.equals(field)) {
return type;
}
}
return null;
}
我没有使用序列化来传递数据。我有一个abstractOrderRepository类,我在其中声明了一个Map row函数,该函数返回如下对象顺序:我添加了下面的完整代码。现在更明确的是,您使用的json序列化器是哪种类型?私有OfferType OfferType;按顺序,类按类型序列化。例如,如果您使用更快的xml,则可以添加@JsonDeserialize/@JsonSerialize注释。如果是jaxb,则可以添加@XmlJavaTypeAdapter。请调查您的pom或lib文件夹,并告诉您是否有名为“jackson”、“fasterxml”、“moxy”的smth,我刚刚在我的pom中进行了调查,但没有找到您提到的任何名称。我需要的是检索第一个值(即字符串),但对象应按照我在代码中显示的方式设置(使用枚举类型).这让我很困惑。
public static String getEnumFrontLabel(String daoField) {
OfferType t = getType(field);
if (t != null) {
return t.frontLabel;
}
return null;
}
public static OfferType getType(String field) {
for (OfferType type : values()) {
if (type.equals(field)) {
return type;
}
}
return null;
}