實(shí)體類中嵌套Enum類型并想轉(zhuǎn)換成JSON字符串時(shí)遇到的問(wèn)題。
先說(shuō)明問(wèn)題的產(chǎn)生,在自己寫(xiě)著玩的時(shí)候,新建了一個(gè)User類如下:
package com.ma.xdo;
import lombok.*;
import java.io.Serializable;
/**
* @ClassName User
* @Description TODO
* @Author @O_o
* @Date 2023/6/8 14:24
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
private String name;
private Integer age;
private SexEnum sex;
}
不難看出User類中,用到了枚舉類把性別規(guī)定成了兩個(gè)。
下面是SexEnum類:
public enum SexEnum {
MALE(1, "男"),
FEMALE(2, "女");
private Integer sex;
private String sexName;
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public String getSexName() {
return sexName;
}
public void setSexName(String sexName) {
this.sexName = sexName;
}
SexEnum(Integer sex, String sexName) {
this.sex = sex;
this.sexName = sexName;
}
}
這里,當(dāng)我想通過(guò)工具類將其轉(zhuǎn)換成json字符串并且讓枚舉中的 值能返回對(duì)應(yīng)的文字時(shí),出現(xiàn)了問(wèn)題。返回的值是枚舉類的 屬性名 而不是對(duì)應(yīng)的值
{"age":19,"name":"李四","sex":"MALE"}
(寫(xiě)到這里,我也不知道是否在企業(yè)開(kāi)發(fā)中有這種需求。但是就當(dāng)學(xué)習(xí)了一種工具的使用方法了)
于是,通過(guò)資料的查詢,當(dāng)前使用的環(huán)境是fastJson,fastJson提供了自定義序列化的接口ObjectSerializer,實(shí)現(xiàn)這個(gè)接口, 需要重寫(xiě)其提供的一個(gè)方法
public class SexEnumSerializer implements ObjectSerializer {
@Override
public void write(JSONSerializer jsonSerializer, Object o, Object o1, Type type, int i) throws IOException {
// TODO 這里固定要自定義的轉(zhuǎn)換類型就好
}
}
由于這個(gè)接口是一個(gè)函數(shù)式接口,于是我干脆用到了lambda表達(dá)式 實(shí)現(xiàn)流程如下文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-476006.html
//聲明出一個(gè)配置對(duì)象
SerializeConfig config = new SerializeConfig();
//把自定義的序列化方式,當(dāng)接到的這個(gè)值 包含 sexEnum這個(gè)類型屬性的時(shí)候 會(huì)替換其sex中的對(duì)應(yīng)值
config.put(SexEnum.class, (JSONSerializer jsonSerializer, Object o, Object o1, Type type, int i)->{
if (o instanceof SexEnum) {
SexEnum sexEnum = (SexEnum) o;
jsonSerializer.write(sexEnum.getSexName());
} else {
jsonSerializer.write(o);
}
});
String json = JSON.toJSONString(user, config);
由此 解決了此次遇到的問(wèn)題。成功輸出文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-476006.html
{"age":19,"name":"李四","sex":"男"}
到了這里,關(guān)于實(shí)體類中嵌套Enum類型并想轉(zhuǎn)換成JSON字符串時(shí)遇到的問(wèn)題。的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!