2016-09-08 25 views
1

我有一个POJO自定义setter方法的所有属性,跟踪属性是否明确设置。 setter存储到fieldNameSet布尔字段并为这些标记公开isFieldNameSet获取者。 我希望杰克逊能够动态地将这个类序列化为只有isFieldNameSettrue的那些字段。如何实现Jackson的动态部分JSON序列化?

背景:

我开始写一个自定义JsonFilter实现,但它不会给任何上下文作为当前对象实例正在连载所以很明显,我无法读取isFieldNameSet属性的当前值。

回答

0

快速从杰克逊例如黑客

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 

} 

忽略年龄,你看:

{ “名”: “mkyong”, “消息”: “你好杰克逊1”,“你好杰克逊2“,”hello jackson 3“]}

注意杰克逊源代码是:https://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

相关问题