问题
在序列化枚举字段的时候,出现只序列化一个string的枚举名字。这对于普通java枚举类问题不大的,但是对于稍复杂一点java枚举类,就会出现字段丢失的情况。例如,如下枚举类:
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum StatusEnum {
OPEN(1, "开启"),
CLOSE(2, "关闭");
private final int code;
private final String name;
public static StatusEnum getByCode(int code){
for (StatusEnum value : values()) {
if (value.getCode() == code) {
return value;
}
}
return null;
}
}
使用上述枚举类作为属性,序列化出来的结果为:
OPEN
。
序列化出来的结果是枚举名字,但是,我们期望序列化出来的结果为一个对象,如下:
{
"code": 1,
"name": "开启"
}
解决
只需在枚举类上加上如下注解即可:
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
即如下:
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Getter;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
@Getter
@AllArgsConstructor
public enum StatusEnum {
OPEN(1, "开启"),
CLOSE(2, "关闭");
private final int code;
private final String name;
public static StatusEnum getByCode(int code){
for (StatusEnum value : values()) {
if (value.getCode() == code) {
return value;
}
}
return null;
}
}
获取枚举数组:
List<StatusEnum> result = Arrays.asList(StatusEnum.values());
这样直接返回这个枚举数组result
,就是对于的序列化枚举对象数组json,简单粗暴。