2016-03-31 5 views
-3
package com.dh.inheritance; 

import com.fasterxml.jackson.annotation.JsonAutoDetect; 
import com.fasterxml.jackson.annotation.JsonTypeInfo; 
import com.fasterxml.jackson.annotation.PropertyAccessor; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.SerializationFeature; 


public class Client6{ 

    public static void main(String[] args){ 

     ObjectMapper objectMapper = new ObjectMapper(); 
     objectMapper.enableDefaultTyping(); 
     objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_OBJECT);   
     objectMapper.setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE); 
     objectMapper.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE); 
     objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); 
     objectMapper.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);   
     objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, true); 
     objectMapper.configure(SerializationFeature.FAIL_ON_SELF_REFERENCES, true); 

     try { 

      String test = null; 
      test.length(); 

     } catch (Exception e) { 

      try { 
       String jsonString = objectMapper.writeValueAsString(e); 
       System.out.println(jsonString); 
      } catch (JsonProcessingException e1) { 
       e1.printStackTrace(); 
      } 
     } 
    } 

} 

Я получаю ниже исключения, когда я выполняю над кодом. Дайте мне знать, как решить эту проблему.Сериализовать исключения Java, используя Jackson

com.fasterxml.jackson.databind.JsonMappingException: Direct self-reference leading to cycle (through reference chain: java.lang.NullPointerException["cause"]) 
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:230) 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter._handleSelfReference(BeanPropertyWriter.java:879) 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:666) 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678) 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeWithType(BeanSerializerBase.java:569) 
    at com.fasterxml.jackson.databind.ser.impl.TypeWrappedSerializer.serialize(TypeWrappedSerializer.java:32) 
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:130) 
    at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3613) 
    at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:2980) 
    at com.dh.inheritance.Client6.main(Client6.java:33) 
+1

http://stackoverflow.com/questions/10446891/jackson-self-reference-leading-to -цикл – Stefan

+0

Stefen Спасибо за ответ. Позвольте мне попробовать, как вы сказали. – Partha

ответ

1

Эта страница переведена на машинный перевод с кодом ниже.

объектMapper.registerModule (новый MyModule());

package com.dh.inheritance; 

import com.fasterxml.jackson.annotation.JsonIdentityInfo; 
import com.fasterxml.jackson.annotation.ObjectIdGenerators; 


public abstract class MixIn { 

    @JsonIdentityInfo(generator=ObjectIdGenerators.StringIdGenerator.class, property="$id") 
    private Throwable cause; 

} 

package com.dh.inheritance; 

import com.fasterxml.jackson.core.Version; 
import com.fasterxml.jackson.databind.module.SimpleModule; 

public class MyModule extends SimpleModule{ 

    public MyModule() { 
     super("test", new Version(2, 7, 2, null)); 
    } 

    @Override 
    public void setupModule(SetupContext context) { 
     context.setMixInAnnotations(Throwable.class, MixIn.class);  
    } 

} 

Но чтение json для объекта не получилось. Выход:

{ "java.lang.NullPointerException": { "detailMessage": нулевой, "причина": { "java.lang.NullPointerException": { "$ ID": "912da540-bf85-4e5d -869c-acfaebe85bdf "," detailMessage ": null," cause ":" 912da540-bf85-4e5d-869c-acfaebe85bdf "," stackTrace ": null}}," stackTrace ": null}} com.fasterxml.jackson. databind.exc.UnrecognizedPropertyException: Нераспознанное поле «$ id» (класс java.lang.NullPointerException), а не , отмеченное как невежественное (3 известных свойства: «причина», «stackTrace», «detailMessage»]) в [Источник: {"java.lang.NullPointerException": {"detailMessage": null, "cause": {"java.lang.NullPointerException": {"$ id": "912da540-bf85-4e5d-869c-acfaebe85b DF», "detailMessage": NULL, "причина": "912da540-bf85-4e5d-869c-acfaebe85bdf", "StackTrace": нулевая}}, "StackTrace": нулевая}}; строка: 1, столбец: 107] (через цепочку ссылок: java.lang.NullPointerException ["$ id"]) в com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from (UnrecognizedPropertyException.java:62) at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty (DeserializationContext.java:855) на com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty (StdDeserializer.java:1083) на com.fasterxml .jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty (BeanDeserializerBase.java:1389) на com.fasterxml.jackson.databind.deser.std.ThrowableDeserializer.deserializeFromObject (ThrowableDeserializer.java:135) на com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize (BeanDeserializer.java:133) на com.fasterxml.jackson.databind.jsontype.impl.AsWrapperTypeDeserializer._deserialize (AsWrapperTypeDeserializer.java:115) на com.fasterxml.jackson.databind.jsontype.impl.AsWrapperTypeDeserializer.deserializeTypedFromObject (AsWrapperTypeDeserializer.java:49) на com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeWithType (BeanDeserializerBase.java:1017) в ком .fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize (SettableBeanProperty.java:488) at com.fasterxml.jackson.databind.deser.std.ThrowableDeseri alizer.deserializeFromObject (ThrowableDeserializer.java:104) на com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize (BeanDeserializer.java:133) на com.fasterxml.jackson.databind.jsontype.impl.AsWrapperTypeDeserializer. _deserialize (AsWrapperTypeDeserializer.java:115) на com.fasterxml.jackson.databind.jsontype.impl.AsWrapperTypeDeserializer.deserializeTypedFromObject (AsWrapperTypeDeserializer.java:49) на com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeWithType (BeanDeserializerBase.java:1017) по адресу com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize (TypeWrappedDeserializer.java:42) на com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose (ObjectMapper.java:3789) на com.fasterxml.jackson.databind.ObjectMapper.readValue (ObjectMapper.java:2779) на com.dh.inheritance.Client6.main (Client6.java:45)

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