Kann nicht eine grundlegende Jackson Mixin zu arbeiten

Ich war das Experimentieren mit Jackson 2.0 Mixins in Verbindung zu serialisieren einer Klasse mit keine Anmerkungen.

Vereinfachte Source-code unten. Beachten Sie, dass ich nicht mit Getter/setter, aber es schien, wie kann ich das noch verwenden Mixins in Verbindung nach einigen ziemlich skizzenhafte Dokumentation.

public class NoAnnotation {
   private Date created;
   private String name;
   private int id;
   private List<URL> urls = new ArrayList();

   //make one with some data in it for the test
   static NoAnnotation make() {
      NoAnnotation na= new NoAnnotation();
      na.created = new Date();
      na.name = "FooBear";
      na.id = 23456;

      try {
         na.urls.add(new URL("http://www.eclipse.org/eclipselink/moxy.php"));
         na.urls.add(new URL("http://jaxb.java.net"));
      } catch (MalformedURLException e) {
         throw new RuntimeException(e);
      }
      return na;
   }

   //my Mixin "Class"
   static class JacksonMixIn {
      JacksonMixIn(@JsonProperty("created") Date created,
                   @JsonProperty("name") String name,
                   @JsonProperty("id") int id, 
                   @JsonProperty("urls") List<URL> urls)
         { /* do nothing */ }
   }

   //test code
   public static void main(String[] args) throws Exception {
      NoAnnotation na = NoAnnotation.make();
      ObjectMapper objectMapper = new ObjectMapper();
      objectMapper.addMixInAnnotations(NoAnnotation.class, JacksonMixIn.class);
      String jsonText = objectMapper.writeValueAsString(na);
      System.out.println(jsonText);
   }
}

Wenn ich laufen Hauptsache ich bekomme

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class com.flyingspaniel.so.NoAnnotation and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) )
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:51)
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:25)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:108)
    at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:2407)
    at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:1983)
    at com.flyingspaniel.so.NoAnnotation.main(NoAnnotation.java:49)

Ich vermute, dass ich das weglassen eines basic "setThis" Schritt irgendwo, aber weiß nicht was. Danke!

EDIT: Wenn ich Folgen Sie den Anweisungen in der Ausnahme und fügen Sie eine Zeile

objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

Ich bekomme nicht mehr eine Ausnahme, aber das Ergebnis ist eine leere JSON-String, "{}".

EDIT2: Wenn ich die Felder, die öffentlichkeit, das es funktioniert, aber das ist keine vernünftige Objekt-design.

InformationsquelleAutor user949300 | 2012-06-07
Schreibe einen Kommentar