java中的Enum在@RestController(@ResponseBody) 注解下返回的表現


參考文檔

枚舉

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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM