我知道如何在Jackson中使用自定义序列化程序(通过扩展JsonSerializer
),但是我希望默认序列化程序可用于除1个字段之外的所有字段,我想使用自定义序列化程序覆盖该字段。
注释不是一种选择,因为我正在序列化一个生成的类(来自Thrift)。
编写自定义杰克逊序列化程序时,如何仅指定要覆盖的某些字段?
更新:
这是我要序列化的类:
class Student {
int age;
String firstName;
String lastName;
double average;
int numSubjects
// .. more such properties ...
}
上面的类有很多特质,其中大多数使用本机类型。我只想覆盖自定义序列化程序中的一些属性,然后让Jackson照常处理其余的属性。例如,我只想将“
age”字段转换为自定义输出。
我遇到了同样的问题,并使用CustomSerializerFactory解决了这个问题。
这种方法使您可以忽略所有对象或特定类型的某些特定字段。
public class EntityCustomSerializationFactory extends CustomSerializerFactory {
//ignored fields
private static final Set<String> IGNORED_FIELDS = new HashSet<String>(
Arrays.asList(
"class",
"value",
"some"
)
);
public EntityCustomSerializationFactory() {
super();
}
public EntityCustomSerializationFactory(Config config) {
super(config);
}
@Override
protected void processViews(SerializationConfig config, BeanSerializerBuilder builder) {
super.processViews(config, builder);
//ignore fields only for concrete class
//note, that you can avoid or change this check
if (builder.getBeanDescription().getBeanClass().equals(Entity.class)){
//get original writer
List<BeanPropertyWriter> originalWriters = builder.getProperties();
//create actual writers
List<BeanPropertyWriter> writers = new ArrayList<BeanPropertyWriter>();
for (BeanPropertyWriter writer: originalWriters){
String propName = writer.getName();
//if it isn't ignored field, add to actual writers list
if (!IGNORED_FIELDS.contains(propName)){
writers.add(writer);
}
}
builder.setProperties(writers);
}
}
}
然后,您可以使用如下所示的内容:
objectMapper.setSerializerFactory(new EntityCustomSerializationFactory());
objectMapper.writeValueAsString(new Entity());//response will be without ignored fields
我有这样的Jackson注释类: 假设我不能更改我的类代码。那么,如何让ObjectMapper只覆盖field2的JsonIgnore并将其序列化为json?但我希望它忽略field4。这很简单,只需要几行代码吗? 我的常规序列化代码:
有没有一种方法可以使用Jackson JSON处理器来执行自定义字段级别的序列化?例如,我想让 注意,age=25被编码为数字,而favoritenumber=123被编码为字符串。Jackson将编组为一个数字。在这种情况下,我希望将favoriteNumber编码为字符串。
情况如下:我已经设法让Jackson反序列化以下通用 作为HTTP客户端,并使用exchange
下面的代码再现了这个问题: 上面的代码不做其他注册“自定义”序列化程序的事情(只是委托回原始序列化程序),但它生成的JSON没有null属性: {“第一个”:“鲍勃”,“最后一个”:“巴克”} 我读过许多看似相关的SO文章,但没有一篇能让我找到解决方案。我尝试在序列化时显式地将映射器设置为,但没有成功。 我唯一的线索是JavaDoc for JsonSerializer中的一条注释: 注意:永远不
我试图创建会影响序列化值的自定义jackson注释。 意思是: 现在序列化对象X(10)将导致: 我怎样才能做到这一点?
问题内容: 有没有一种使用Jackson JSON Processor进行自定义字段级序列化的方法?例如,我想上课 序列化为以下JSON: 请注意,age = 25被编码为 数字, 而favoriteNumber = 123被编码为 string 。开箱即用的杰克逊将集结到一个号码。在这种情况下,我希望将favoriteNumber编码为字符串。 问题答案: 您可以实现自定义序列化器,如下所示: