Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在web界面中获取枚举类型的值_Java_Spring - Fatal编程技术网

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;
}