2015-05-26 47 views
-1

我已经实现一个枚举class.This枚举类型的值是代码:获得在网络界面

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.setOfferType(OfferType.getEnum((rs.getString("offerType")))); 

的问题是,在该设置以后会有值与enum.I大写想要检索这是枚举的第一个值,我该怎么办?

在此先感谢

回答

0

Spring使用默认杰克逊序列化程序。因此,为了有自定义序列化,你应该注释你的领域:

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

另一种方式是让价值调用offerType.frontLabel并将其设置为String或实施toString()方法是不是最好的解决办法:

@Override 
public String toString() { 
    return this.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; 
} 
+0

我did'nt使用序列来传递数据TU UI.I有一个abstractOrderRepository类,我在那里声明了一个Map行函数,它返回像这样的对象顺序: – szejli

+0

因此尝试代码的最后一部分或toString – nesteant

+0

我在下面添加了完整的代码。现在更明确 – szejli