A user POSTs {"lang": ["en_US", "en_UK"]} to a REST API. I want to fill an object which has this property List<EnmLanguage> lang;. Every other thing works except JSON arrays.
My EnmLanguage.java is:
@JsonSerialize(
using = BaseEnumSerializer.class
)
@JsonDeserialize(
using = BaseEnumDeserializer.class
)
public enum EnmLanguage implements BaseEnum, Serializable {
en_US {
public String getCode() {
return "en_US";
}
public String getText(EnmLanguage s) {
return s == EnmLanguage.en_US ? "English" : "İngilizce";
}
},
My BaseEnum.java is:
public interface BaseEnum {
Object getCode();
String getText(EnmLanguage lang);
default String getText() {
return this.getText(EnmLanguage.tr_TR);
}
default Map<String, Object> getMap(EnmLanguage lang) {
return new HashMap<String, Object>() {
{
this.put("name", BaseEnum.this.getText(lang));
this.put("id", BaseEnum.this.getCode());
}
};
}
default Map<String, Object> getMap() {
return this.getMap(EnmLanguage.tr_TR);
}
static <T extends Enum<T> & BaseEnum> T fromCode(Class<T> parent, Object code) {
Map<Object, T> lookup = new HashMap();
Enum[] var3 = (Enum[])parent.getEnumConstants();
int var4 = var3.length;
for(int var5 = 0; var5 < var4; ++var5) {
T d = var3[var5];
lookup.put(((BaseEnum)d).getCode().toString(), d);
}
return (Enum)lookup.get(code.toString());
}
}
My BaseEnumDeserialiazer is:
public class BaseEnumDeserializer<T extends Enum<T> & BaseEnum> extends StdDeserializer<T> {
public BaseEnumDeserializer() {
this((Class)null);
}
public BaseEnumDeserializer(Class<T> vc) {
super(vc);
}
public T deserialize(JsonParser jsonparser, DeserializationContext context) throws IOException {
Field field = this.findField(jsonparser.getCurrentName(), jsonparser.getCurrentValue().getClass());
Class<T> javaType = field.getType();
return BaseEnum.fromCode(javaType, jsonparser.getText());
}
public Field findField(String name, Class<?> c) {
while(c != null) {
Field[] var3 = c.getDeclaredFields();
int var4 = var3.length;
for(int var5 = 0; var5 < var4; ++var5) {
Field field = var3[var5];
if (!Modifier.isStatic(field.getModifiers()) && field.getName().equals(name)) {
return field;
}
}
c = c.getSuperclass();
}
return null;
}
}
But at the end it doesn't convert "lang": ["en_US", "en_UK"] into List of EnmLanguage. I think it doesn't know to which BaseEnum convert. How should I let it know that it should convert it into List<EnmLanguage>?