Avoid Jackson serialization on non fetched lazy objects

前端 未结 14 2069
终归单人心
终归单人心 2020-11-22 13:02

I have a simple controller that return a User object, this user have a attribute coordinates that have the hibernate property FetchType.LAZY.

When I try to get this

14条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-22 13:26

    I tried @rick's useful answer, but ran into the problem that "well-known modules" such as jackson-datatype-jsr310 weren't automatically registered despite them being on the classpath. (This blog post explains the auto-registration.)

    Expanding on @rick's answer, here's a variation using Spring's Jackson2ObjectMapperBuilder to create the ObjectMapper. This auto-registers the "well-known modules" and sets certain features in addition to installing the Hibernate4Module.

    @Configuration
    @EnableWebMvc
    public class MyWebConfig extends WebMvcConfigurerAdapter {
    
        // get a configured Hibernate4Module
        // here as an example with a disabled USE_TRANSIENT_ANNOTATION feature
        private Hibernate4Module hibernate4Module() {
            return new Hibernate4Module().disable(Hibernate4Module.Feature.USE_TRANSIENT_ANNOTATION);
        }
    
        // create the ObjectMapper with Spring's Jackson2ObjectMapperBuilder
        // and passing the hibernate4Module to modulesToInstall()
        private MappingJackson2HttpMessageConverter jacksonMessageConverter(){
            Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
                                .modulesToInstall(hibernate4Module());
            return new MappingJackson2HttpMessageConverter(builder.build());
      }
    
        @Override
        public void configureMessageConverters(List> converters) {
            converters.add(jacksonMessageConverter());
            super.configureMessageConverters(converters);
        }
    }
    

提交回复
热议问题