2013-12-15 5 views
0

Я пытаюсь сериализовать довольно большую структуру с Джексоном.
Однако, он также пытается экспортировать много подструктур я никогда не нужно (вызывая JsonMappingException: No serializer found for class)Исключить классы и пространства имен из сериализации?

Так как я могу исключать классы и пространства имен сериализации?

В качестве альтернативы, как я могу пометить свойства моих классов как исключенные/проигнорированные?

ответ

1

Используйте ключевое слово переходное ключевое слово, если у вас есть фактически доступ к подструктуре, которую вы хотите исключить.

transient - ключевое слово Java, которое отмечает переменную-член не должно быть сериализовано, когда оно сохраняется в потоках байтов. Когда объект , переданный по сети, объект должен быть «сериализован». Сериализация преобразует состояние объекта в последовательные байты. Эти байты отправляются по сети, и объект воссоздается из этих байтов. Переменные участника, помеченные ключевым словом java transient, не переданы , они умышленно утеряны.

http://en.wikibooks.org/wiki/Java_Programming/Keywords/transient

0

Пожалуйста, дайте пример для исключает классы и пространство имен но для свойств, для которых вы не можете контролировать исходный код, который вы можете использовать следующие по типам и полям

@JsonIgnoreProperties(value = {"propertyName", "otherProperty"}) 

Here's the javadoc.

Приведен пример

@JsonIgnoreProperties(value = { "name" }) 
public class Examples { 
    public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException { 
     Examples examples = new Examples(); 
     examples.setName("sotirios"); 
     Custom custom = new Custom(); 
     custom.setValue("random"); 
     custom.setNumber(42); 
     examples.setCustom(custom); 
     ObjectMapper mapper = new ObjectMapper(); 
     StringWriter writer = new StringWriter(); 

     mapper.writeValue(writer, examples); 
     System.out.println(writer.toString()); 
    } 

    private String name; 

    @JsonIgnoreProperties(value = { "value" }) 
    private Custom custom; 

    public String getName() { 
     return name; 
    } 

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

    public Custom getCustom() { 
     return custom; 
    } 

    public void setCustom(Custom custom) { 
     this.custom = custom; 
    } 

    static class Custom { 
     private String value; 
     private int number; 
     public String getValue() { 
      return value; 
     } 
     public void setValue(String value) { 
      this.value = value; 
     } 
     public int getNumber() { 
      return number; 
     } 
     public void setNumber(int number) { 
      this.number = number; 
     } 
    } 
} 

печатает

{"custom":{"number":42}} 

Другими словами, он проигнорировал Examples#name и Custom#value.

Смежные вопросы