枚舉
public enum CouponType {
PLATFORM("平台優惠券"), NEWCOMER("新人專享優惠券"), INVITE("邀請獎勵優惠券"), DESIGNATED_USER("特定用戶優惠券");
private final String info;
CouponType(String info) {
this.info = info;
}
public String getInfo() {
return info;
}
@Override
public String toString() {
return this.info;
}
}
直接返回JSON
couponsType:"PLATFORM"
加注解返回鍵值對
- 枚舉類上加 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
couponsType: {info: "平台優惠券"}
自定義序列化
public class CouponTypeSerializer extends StdSerializer {
public CouponTypeSerializer() {
super(CouponType.class);
}
public CouponTypeSerializer(Class t) {
super(t);
}
@Override
public void serialize(Object couponOperation, JsonGenerator generator, SerializerProvider serializerProvider) throws IOException {
CouponType c = (CouponType) couponOperation;
generator.writeStartObject();
generator.writeFieldName("name");
generator.writeString(c.name());
generator.writeFieldName("info");
generator.writeString(c.getInfo());
generator.writeEndObject();
}
}
- 枚舉類上加 @JsonSerialize(using = CouponTypeSerializer.class)
couponsType: {name: "PLATFORM", info: "平台優惠券"}
如果頁面需要返回name,在定義的時候添加name字段最方便,配合@JsonFormat(shape = JsonFormat.Shape.OBJECT)
比如:
PLATFORM("平台優惠券","PLATFORM") ...
private final String info;
private final String name;
CouponType(String info,String name) {
this.info = info;
this.name=name;
}
enum 持久化
enum 類型默認是是存儲ORDINAL (enum的順序:0,1,2)
為了代碼健壯,建議保存String(enum的name屬性)
/**
* 優惠券類型
*/
@Enumerated(EnumType.STRING)
private CouponType couponsType;