Ram*_*tra 13 java json jackson
要将具有camel case属性的java对象序列化为带有下划线的json,我们使用PropertyNamingStrategyas SNAKE_CASE.
那么,是否还有相反的事情要做.也就是说,使用下划线将json反序列化为带有camel case的Java对象.
例如,JSON:
{
"user_id": "213sdadl"
"channel_id": "asd213l"
}
Run Code Online (Sandbox Code Playgroud)
应该反序列化到这个Java对象:
public class User {
String userId; // should have value "213sdadl"
String channelId; // should have value "asd213l"
}
Run Code Online (Sandbox Code Playgroud)
我知道这样做的一种方法是通过@JsonProperty在现场级别工作的注释.我有兴趣知道任何全球设置.
那么你可以有一个PropertyNamingStrategy的实现,看起来像这样:
import org.codehaus.jackson.map.MapperConfig;
import org.codehaus.jackson.map.PropertyNamingStrategy;
import org.codehaus.jackson.map.introspect.AnnotatedField;
import org.codehaus.jackson.map.introspect.AnnotatedMethod;
public class CustomNameStrategy extends PropertyNamingStrategy {
@Override
public String nameForField(MapperConfig config, AnnotatedField field, String defaultName) {
return convert(defaultName);
}
@Override
public String nameForGetterMethod(MapperConfig config, AnnotatedMethod method, String defaultName) {
return convert(defaultName);
}
@Override
public String nameForSetterMethod(MapperConfig config, AnnotatedMethod method, String defaultName) {
return convert(defaultName);
}
public String convert(String defaultName) {
char[] arr = defaultName.toCharArray();
StringBuilder nameToReturn = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == '_') {
nameToReturn.append(Character.toUpperCase(arr[i + 1]));
i++;
} else {
nameToReturn.append(arr[i]);
}
}
return nameToReturn.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的实现或执行desrialization的类中,您可以拥有:
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(new CustomNameStrategy());
YourClass yourClass = mapper.readValue(yourJsonString, YourClass.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10784 次 |
| 最近记录: |