2017-09-13 14 views
2

최대 절전 모드로 봄 휴식 API를 개발하려고합니다. Google에서 검색 한 후 게으른로드에 대한 해결책을 찾지 못했습니다. 나머지 API를 호출 한 후봄 휴식 최대 절전 모드로 게으름로드

University.java

@Entity() 
@Table(schema = "core", name = "university") 
public class University extends BaseEntity { 

    private String uniName; 
    private String uniTelephon; 


    @LazyCollection(LazyCollectionOption.FALSE) 
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "university", cascade = CascadeType.ALL) 
    @JsonManagedReference 
    private List<Student> students; 

//setter and getter 
} 

Student.java

@Entity 
@Table(schema = "core",name = "student") 
public class Student { 

    @Id 
    @GeneratedValue    
    private long id;   

    private String firstName;   

    private String lastName;   

    private String section; 

    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name = "UNIVERSITY_ID",nullable = false) 
    @JsonBackReference 
    private University university; 
    // setter and getter 
} 

어떤 내 나머지 끝 지점

@GetMapping("/list") 
public ResponseEntity list() throws Exception { 
    // I need to return just Universities But it return it eagerly with their students 
    return new ResponseEntity(this.universityService.findAll(), HttpStatus.OK); 
} 

: 나는 두 엔티티 아래와 같이가 그것은 모든 학생들과 함께 대학을 돌려줍니다.

잭슨에게 채워지지 않은 객체 또는 컬렉션을 직렬화하지 않도록 지시하는 방법이 있습니까?

입증 된 솔루션으로 도움을 줄 수 있습니까? 다음과 같은 의존성을 추가

답변

3

봅니다 (당신의 최대 절전 모드 버전에 따라) : 다음

<dependency> 
    <groupId>com.fasterxml.jackson.datatype</groupId> 
    <artifactId>jackson-datatype-hibernate5</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 

그리고 WebMvcConfigurerAdapter 클래스에 다음을 추가 (당신은 자바 기반의 구성이 가정) :

@Override 
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
    converters.add(jackson2HttpMessageConverter()); 
} 

@Bean 
public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() { 
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); 
    converter.setObjectMapper(this.jacksonBuilder().build()); 

    return converter; 
} 

public Jackson2ObjectMapperBuilder jacksonBuilder() { 
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); 

    Hibernate5Module hibernateModule = new Hibernate5Module(); 

    hibernateModule.configure(Feature.FORCE_LAZY_LOADING, false); 

    builder.modules(hibernateModule); 

    // Spring MVC default Objectmapper configuration 
    builder.featuresToDisable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); 
    builder.featuresToDisable(MapperFeature.DEFAULT_VIEW_INCLUSION); 

    return builder; 
} 

을 잭슨의 objectMapper는 게으른로드 값을 가져 오지 않아야합니다.

+0

HTTP 상태 500 - 내용을 쓸 수 없습니다. 지연 컬렉션을 초기화하지 못했습니다. a2.asena.cashModel.University.students, 프록시를 초기화 할 수 없습니다. (참조 체인을 통해 : java. util.ArrayList [0] -> a2.asena.cashModel.University [ "students"]); 중첩 예외는 com.fasterxml.jackson.databind.JsonMappingException입니다 : 지연 컬렉션을 지연 초기화하지 못했습니다 : a2.asena.cashModel.University.students, 프록시를 초기화 할 수 없습니다 - 세션 없음 (참조 체인을 통해 : java.util.ArrayList [ 0] -> a2.asena.cashModel.University [ "students"]) 위의 예외 솔루션에 대한 – Generic

+0

이 재정의합니다. Appinitializer의 필터 @Override protected Filter [] getServletFilters() { return new Filter [] {new {HiddenHttpMethodFilter(), 새로운 MultipartFilter(), 새로운 OpenEntityManagerInViewFilter()}; – Generic

+0

일부 기사가 적절한 해결책이 아니라고 말합니다 – Generic