Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Serialização de Objeto, onde não desejo buscar as propriedades LAZY

Bom dia! Estou criando uma aplicação WEB com o Spring MVC. Boa parte das requisições são feitas por ajax retornando os dados para o front-end em json.

Porém, gostaria de ignorar os atributos do objeto que estão LAZY. Estou usando o jackson e ao invés de ignora ele lança um erro informando que não conseguiu carregar a ojeto LAZY.

org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: failed to lazily initialize a collection of role: br.com.cpfl.models.TurnoPlanejado.indisponibilidades, could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->br.com.cpfl.models.TurnoPlanejado["indisponibilidades"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: br.com.cpfl.models.TurnoPlanejado.indisponibilidades, could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->br.com.cpfl.models.TurnoPlanejado["indisponibilidades"])

Pesquisando na internet, verifiquei que poderia utilizar um conversor de mensagens, cadastrando na classe de configuração do Spring, e fiz conforme abaixo. Porém, o erro permanece.


@EnableWebMvc
@ComponentScan(basePackages={"br.com.gt"})
public class AppWebConfiguration extends WebMvcConfigurationSupport{

    //REMOVI OUTRAS CONFIGURAÇÕES 

    @Bean
    public MappingJackson2HttpMessageConverter jacksonMessageConverter(){
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();

        ObjectMapper mapper = new ObjectMapper();
        //Registering Hibernate4Module to support lazy objects

        mapper.registerModule(new Hibernate4Module());

        messageConverter.setObjectMapper(mapper);
        return messageConverter;

    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //Here we add our custom-configured HttpMessageConverter
        converters.add(jacksonMessageConverter());
        super.configureMessageConverters(converters);
    }

}

Alguém sabe o que devo fazer?

3 respostas

Pesquisando melhor na internet encontrei a solução: @Configuration public class CustomWebMvcAutoConfig extends WebMvcConfigurerAdapter{ @Override public void extendMessageConverters(List> converters) { for (@SuppressWarnings("rawtypes") HttpMessageConverter converter : converters) { if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) { ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper(); mapper.registerModule(new Hibernate4Module()); // replace Hibernate4Module() with the proper class for your hibernate version. } } } }

Nesse caso, os atributos lazy são serializados com null

solução!

Inserindo o código:

@Configuration
public class CustomWebMvcAutoConfig extends WebMvcConfigurerAdapter{
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        for (@SuppressWarnings("rawtypes") HttpMessageConverter converter : converters) {
            if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
                ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
                mapper.registerModule(new Hibernate4Module());
                // replace Hibernate4Module() with the proper class for your hibernate version.
            }
        }
    }
}