2013-05-30 1 views
7

Sto cercando di creare un'applicazione con angularjs e springmvc.Io ho due classi Province e Comunidad. :Come serializzare le entità caricate pigre con il modulo di jackson ibernato?

@Entity(name="Provincia") 
@Table(name="T_PROVINCIA") 
public class Provincia implements Serializable{ 


private String idProvincia; 
private String nombre;  
private Comunidad refComunidad; 

public Provincia() { 
} 

@Id 
@TableGenerator(name="provinciaGen", 
       table="T_GENERATOR", 
       pkColumnName="ID_GENERATOR", 
       pkColumnValue="ID_PROVINCIA", 
       valueColumnName="ID_VALUE") 
@GeneratedValue(generator="provinciaGen",strategy=GenerationType.TABLE) 
@Column(name="ID_PROVINCIA") 
public String getIdProvincia() { 
    return idProvincia; 
} 

@Column(name="NOMBRE") 
public String getNombre() { 
    return nombre; 
} 

@ManyToOne(targetEntity=Comunidad.class, fetch=FetchType.LAZY) 
@JoinColumn(name="ID_COMUNIDAD") 
public Comunidad getRefComunidad() { 
    return refComunidad; 
} 
setters 
..... 
..... 
} 

@Entity(name="Comunidad") 
@Table(name="T_COMUNIDAD") 
public class Comunidad implements Serializable{ 

@Id 
@TableGenerator(name="comunidadGen", 
       table="T_GENERATOR", 
       pkColumnName="ID_GENERATOR", 
       pkColumnValue="ID_COMUNIDAD", 
       valueColumnName="ID_VALUE") 
@GeneratedValue(generator="comunidadGen",strategy=GenerationType.TABLE) 
@Column(name="ID_COMUNIDAD") 
private String idComunidad; 

@Column(name="NOMBRE") 
private String nombre; 

@Column(name="SHORTNAME") 
private String shortName; 

public Comunidad() { 
} 

getters and setters 
............... 
} 

Nel mio controller:

@RequestMapping("/userlist.json") 
public @ResponseBody List<Provincia> getUserList(){ 
    return this.provinciaService.loadAllProvincias(); 
} 

E ottengo questo errore: /* Nessun serializzatore trovato per la classe org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer e
immobili scoperto per creare BeanSerializer (per evitare eccezioni, disabilitare
SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)) (tramite la catena di riferimenti: java.util.ArrayList [0] -> admin.domain.Provincia ["refC omunidad "] - < admin.domain.Comunidad $$ EnhancerByCGLIB $$ 68ea9e6f [" hibernateLazyInitializer "]) */

Ho letto su github su modulo Jackson Hibernate è una buona scelta per risolvere il problema
: https://github.com/FasterXML/jackson-module-hibernate. Ho incluso il modulo di Jackson hibernate dipendenza nel mio pom.xml

<dependency> 
     <groupId>com.fasterxml.jackson.datatype</groupId> 
     <artifactId>jackson-datatype-hibernate4</artifactId> 
     <version>2.2.0</version> 
</dependency> 

Ma io non so dove configurare il "Hibernate4Module.Feature.FORCE_LAZY_LOADING, vera". Provo a seguire le indicazioni da quella pagina http://blog.pastelstudios.com/2012/03/12/spring-3-1-hibernate-4-jackson-module-hibernate/

ma ottengo lo stesso errore.

C'è qualcuno che può aiutarmi con un esempio semplice per favore?

risposta

10

Puoi provare questo. Mi aiuta.

ObjectMapper mapper = new ObjectMapper(); 

Hibernate4Module hbm = new Hibernate4Module(); 
hbm.enable(Hibernate4Module.Feature.FORCE_LAZY_LOADING); 

mapper.registerModule(hbm); 
ObjectWriter w = mapper.writer(); 
String result = null; 
try { 
    result = w.writeValueAsString(o); 
} catch (JsonProcessingException e) { 
    e.printStackTrace(); 
} 
0

Ho il problema esatto e qui è la mia soluzione.

public class YourObjectMapper extends ObjectMapper { 

    @PostConstruct 
    public void afterPropertiesSet() throws Exception { 
     getSerializationConfig().set(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false); 
    } 
} 

p/s: Valido solo per 1.9.x org.codehaus.jackson.map.ObjectMapper e non 2.x Jackson.

+2

per Jackson 2.x, utilizzare 'ObjectMapper MAPPER = new ObjectMapper();' ' MAPPER.configure (SerializationFeature.FAIL_ON_EMPTY_BEANS, false);' detto questo, nessuno di questi risposte sembravano aiutare il mio problema simile. – Marcus

3

Questo è quanto ho capito di lavoro, sto usando RESTEasy su JBoss wildfly

@Provider 
@Produces(MediaType.APPLICATION_JSON) 
public class JacksonConfig implements ContextResolver<ObjectMapper> { 
    @Override 
    public ObjectMapper getContext(Class<?> type) { 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.registerModule(new Hibernate4Module()); 
     return mapper; 
    } 
} 
+0

Quali versioni? –

+0

Avrei dovuto accennare ... Troppo tempo fa per ripercorrere. Probabilmente erano versioni recenti quando ho iniziato ad usarle, all'inizio del 2015 – RoyB

+0

, non sono sicuro, ma non penso che funzioni in Jackson 2.xe RESTEasy Jackson 2 provider 3.x. Ho bisogno di qualcun altro per testarlo pure. –