【发布时间】:2017-01-06 22:42:13
【问题描述】:
我有一个枚举定义为
public enum Locale {
EN_US, ES_MX
}
但是,这些区域设置为小写字符串,连字符为en-us 和es-mx 在数据中。
有没有办法将这些小写字符串映射到相应的枚举常量?喜欢en-us 到EN_US?
编辑 让我提供更多信息。我有以下类的对象。
public class Song {
private Map<Locale, String> songName;
private int durationMillis;
}
歌曲的名称可能因区域设置而异。所以我在不同的语言环境中为歌曲的名称创建了一个地图。
我有一个包含歌曲信息的 JSON 文件。内容如下:
{
"songs": [
{
"songName": {"en-us":"Song name in US english", "es-mx": "Song name in Spanish"},
"durationMillis": 100000
},
{
"songName": {"en-us": "another song name - English"},
"durationMillis": 200000
}
]
}
我定义了另一个类。
public class Songs {
private Set<Song> songs;
}
我使用 FasterXml 的 ObjectMapper 将 JSON 加载为 Songs 类的对象。
Songs songs = objectMapper.readValue(jsonStr, Songs.class);
上面这行现在崩溃了,因为ObjectMapper 无法将en-us 字符串映射到Locale.EN_US。
我总是可以编辑枚举并将其定义为
public enum Locale {
EN_US("en-us"),
ES_MX("es-mx");
private String value;
Locale(String val){
value = val;
}
}
但是我在某处看到了一种更聪明的方法,它将小写连字符字符串转换为大写下划线文字。你能指出我的解决方案吗?
我需要一个解决方案,以便 FasterXml 的 ObjectMapper 可以将字符串映射到枚举。
【问题讨论】:
-
@jhamon:这不是重复的。我在调用已定义枚举的特定方法时没有灵活性。我不知道杰克逊的 ObjectMapper 会调用什么方法。它可能只适用于构造函数。
标签: java enums jackson fasterxml