gpt4 book ai didi

java - 如何使用 Jackson 实现动态部分 JSON 序列化?

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:06 24 4
gpt4 key购买 nike

我有一个 POJO,其中包含所有属性的自定义 setter 方法,用于跟踪属性是否已显式设置。 setter 存储到 fieldNameSet boolean 字段,并公开这些标志的 isFieldNameSet getter。 我希望 Jackson 仅使用 isFieldNameSettrue 的字段动态序列化该类。

背景:

我开始编写自定义 JsonFilter 实现,但它没有提供有关当前正在序列化的对象实例的任何上下文,因此显然我无法读取 isFieldNameSet 属性的当前值。

最佳答案

从 Jackson 示例中快速破解

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ser.FilterProvider;
import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter;
import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider;

public class JacksonExample {
public static void main(String[] args) {

ObjectMapper mapper = new ObjectMapper();

User user = createDummyUser();

try {

//Its age here , this is conditional based on your fieldset
SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter.serializeAllExcept("age");
FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter);

// Convert object to JSON string
String jsonInString = jsonInString = mapper.writer(filters).writeValueAsString(user);
System.out.println(jsonInString);

// Convert object to JSON string and pretty print

//System.out.println(jsonInString);

} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

private static User createDummyUser() {

User user = new User();

user.setName("mkyong");
user.setAge(33);

List<String> msg = new ArrayList<>();
msg.add("hello jackson 1");
msg.add("hello jackson 2");
msg.add("hello jackson 3");

user.setMessages(msg);

return user;

}
}


package org.soproject;

import java.util.List;

import org.codehaus.jackson.map.annotate.JsonFilter;

@JsonFilter("myFilter")
public class User {

private String name;
private int age;
private List<String> messages;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public List<String> getMessages() {
return messages;
}

public void setMessages(List<String> messages) {
this.messages = messages;
}

// getters and setters

}

忽略年龄,如您所见:

{"name":"mkyong","messages":["你好 jackson 1","你好 jackson 2","你好 jackson 3"]}

注意 jackson 来源来自:https://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

关于java - 如何使用 Jackson 实现动态部分 JSON 序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39395719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com