Käyttäjäkuva

Jackson 2, JSON and lazy JPA relation: avoiding JsonMappingException

The following will apply both to a JAX-RS version (bundled e.g. with WildFly 8.1) and Spring Framework.

A semi-common problem with JPA lazy relations happens when they are serialised to JSON with the common Jackson 2 library: an exeption ”com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy – no Session” is thrown as the relations cannot be traversed at the web tier.

Remedy – JAX-RS

Pay attention especially to the highlighted line 17:

import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module;

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JacksonConfig implements ContextResolver<ObjectMapper> {
    
    private ObjectMapper objectMapper = new ObjectMapper() {
        private static final long serialVersionUID = 1L;
        
        {
            registerModule(new Hibernate4Module());
        }
    };
    
    @Override
    public ObjectMapper getContext(Class<?> objectType) {
        return objectMapper;
    }
}

The following Maven dependencies are needed:

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.3.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-hibernate4</artifactId>
      <version>2.3.0</version>
    </dependency>

Thanks to https://community.jboss.org/message/783055 for the tip.

Remedy – Spring

In Spring the required Hibernate4Module is the same as in pure Java EE, only the syntax for activating it changes. The ObjectMapper can be created as follows:

package com.sovelto.web;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module;

public class HibernateAwareObjectMapper extends ObjectMapper {
    private static final long serialVersionUID = 1L;

    public HibernateAwareObjectMapper() {
        registerModule(new Hibernate4Module());
    }
}

The mapper is registered in the Spring configuration file, for example:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="...">
        
  <mvc:annotation-driven>
    <mvc:message-converters>
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="objectMapper">
          <bean class="com.sovelto.web.HibernateAwareObjectMapper"/>
        </property>
      </bean>
    </mvc:message-converters>
  </mvc:annotation-driven>
  
</beans>

And finally the required Maven dependencies:

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.3.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-hibernate4</artifactId>
      <version>2.3.0</version>
    </dependency>
Käyttäjäkuva

Why you need to manage your GPO’s from a Windows 8.1 and not with an RDP session to a Server 2012 r2

Käyttäjäkuva

”Tää näyttää erilaiselta?”

Kuukauden vinkki

Närästääkö leikepöydän tuen puute Hyper-V -yhteyksissä?

4.2.2014

Microsoftin Hyper-V-ympäristöissä on ollut haasteena datan ja/tai tiedostojen kopiointi virtuaalikoneeseen/-sta leikepöydän avulla. Tähän saakka vain tekstiä (ja sitäkin rajallisen määrän) on voinut kopioida Virtual Machine Connection (VMC) -valikon kautta, mutta virtuaalikoneesta ulos ei kopiointi ole onnistunut kuin verkkoyhteyden tai esim. Remote Desktop -yhteyden avulla. Isäntäkoneen USB-väylään kytketyn kirjoittimen tai toimikortinlukijan käytöstä en ole enää edes jaksanut haaveilla.

Lue koko artikkeli…

Kiltamestarit

  • Käyttäjäkuva
    ahti.haukilehto.
  • Käyttäjäkuva
    Heikki Bergius.
  • Käyttäjäkuva
    Heikki Raatikainen.
  • Käyttäjäkuva
    Mika Seitsonen.
  • Käyttäjäkuva
    Mauri Meronen.
  • Käyttäjäkuva
    Nestori Syynimaa.
  • Käyttäjäkuva
    Pertti Pellonpoika.
  • Käyttäjäkuva
    Panu Korpela.
  • Käyttäjäkuva
    Sakari Kouti.
  • Käyttäjäkuva
    Sami M. Leppänen. Henkilöstön- ja organisaation osaamisen kehittäjä. Learning 2.0 evankelista. Sovelto Channel konseptin ja palvelun palvelupäällikkö.
  • Käyttäjäkuva
    Toni Ylärinne.
  • Käyttäjäkuva
    Tuukka Salonen. Senior-konsultti

Uudet jäsenet