使用Jackson将带有下划线的JSON反序列化为Java中的驼峰大小写?

使用Jackson将带有下划线的JSON反序列化为Java中的驼峰大小写?,java,json,jackson,Java,Json,Jackson,为了将带有驼峰大小写属性的java对象序列化为带有下划线的json,我们使用PropertyNamingStrategy作为SNAKE\u case 那么,是否也有相反的做法呢。也就是说,将带有下划线的json反序列化为带有驼峰大小写的Java对象 比如说,, JSON: 应反序列化到此Java对象: public class User { String userId; // should have value "213sdadl" String channelId; // sh

为了将带有驼峰大小写属性的java对象序列化为带有下划线的json,我们使用
PropertyNamingStrategy
作为
SNAKE\u case

那么,是否也有相反的做法呢。也就是说,将带有下划线的json反序列化为带有驼峰大小写的Java对象

比如说,, JSON:

应反序列化到此Java对象:

public class User {
    String userId; // should have value "213sdadl"
    String channelId; // should have value "asd213l"
}

我知道这是通过
@JsonProperty
注释实现的,该注释在字段级别工作。我有兴趣了解这方面的任何全局设置。

好吧,您可以有一个类似以下内容的PropertyNameingStrategy实现:

import org.codehaus.jackson.map.MapperConfig;
导入org.codehaus.jackson.map.PropertyNamingStrategy;
导入org.codehaus.jackson.map.introspect.AnnotatedField;
导入org.codehaus.jackson.map.introspect.AnnotatedMethod;
公共类CustomNamesStrategy扩展了PropertyNamesStrategy{
@凌驾
公共字符串名称字段(MapperConfig配置,AnnotatedField字段,字符串默认名称){
返回convert(defaultName);
}
@凌驾
公共字符串名称遗忘方法(MapperConfig配置,AnnotatedMethod方法,字符串默认名称){
返回convert(defaultName);
}
@凌驾
SetterMethod的公共字符串名称(MapperConfig配置、AnnotatedMethod方法、字符串defaultName){
返回convert(defaultName);
}
公共字符串转换(字符串默认名称){
char[]arr=defaultName.toCharArray();
StringBuilder name返回=新建StringBuilder();
对于(int i=0;i
然后在您的实现或执行去序列化的类中,您可以:

ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(new CustomNameStrategy());
YourClass yourClass = mapper.readValue(yourJsonString, YourClass.class);

@JLewkovich这不完全是一个复制品。请看问题的最后一行。我不是说
@JsonProperty
注释,这是公认的答案。实际上,如果你有一个你可能感兴趣的答案,请看投票率最高的问题one@Quadrat137是的,我已经看到了答案,你也可以在答案下面看到我的评论。这对我来说并不是双向的。这就是我的问题。我接受这个答案,因为这是迄今为止我得到的唯一解决方案,我认为没有其他干净的方法可以做到这一点。Jackson使用propertyNamingStrategy进行序列化是疯狂的only@AdamSiemion现在我们可以放置注释
@JsonNaming(PropertyNamingStrategy.snakecasestracety.class)
在用户类之前。现在,我们将snake_case json自动转换为camelCase字段。
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(new CustomNameStrategy());
YourClass yourClass = mapper.readValue(yourJsonString, YourClass.class);