복붙노트

[SPRING] Spring Hibernate Jackson Hibernate5 모듈

SPRING

Spring Hibernate Jackson Hibernate5 모듈

Hibernate 5.1.0과 Jackson 2.7.5와 함께 스프링 4.3.1을 설정했습니다.

Jackson ObjectMapper가 Transactional Service를 벗어날 때 객체를 늦게 변환하려고 시도하기 때문에 게으른 초기화 예외가 발생했습니다.

따라서 Jackson의 Hibernate5Module을 읽었습니다.

모듈을 추가 한 후 게으른 예외가 발생하지 않지만 모든 @JsonView 주석이 무시되고 내 게으른 모음이 'null'입니다

public class SpringWebConfig extends WebMvcConfigurerAdapter {

    ...


    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {

        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
                ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
                mapper.registerModule(new Hibernate5Module());
            }
        }

    }

}

내가 잘못하고있는 것이 있습니까? Hibernate5Module은 게으른 컬렉션을 초기화해야합니다 ...

해결법

  1. ==============================

    1.다음과 같이 작동합니다.

    다음과 같이 작동합니다.

    @EnableWebMvc
    @Configuration
    @ComponentScan({ "..." })
    public class SpringWebConfig extends WebMvcConfigurerAdapter {
    
        @Autowired
        SessionFactory sf;
    
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    
            Hibernate5Module module = new Hibernate5Module(sf);
            module.disable(Feature.USE_TRANSIENT_ANNOTATION);
            module.enable(Feature.FORCE_LAZY_LOADING);
    
            Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
            builder.modulesToInstall(module);
    
            converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
    
        }
    
    }
    
  2. ==============================

    2.아래 구현에서 작동하도록합니다.

    아래 구현에서 작동하도록합니다.

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    
        Hibernate5Module module = new Hibernate5Module(); // or Hibernate4Module ... depends on hibernate version you are using
    
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(mapper);
    
        converters.add(new MappingJackson2HttpMessageConverter(mapper));
    
    }
    
  3. from https://stackoverflow.com/questions/38273640/spring-hibernate-jackson-hibernate5module by cc-by-sa and MIT license