sourcecode

휴지 상태 개체를 직렬화할 때 이상한 잭슨 예외가 발생함

copyscript 2023. 4. 4. 21:57
반응형

휴지 상태 개체를 직렬화할 때 이상한 잭슨 예외가 발생함

잭슨이 이상한 예외를 두고 있는데 어떻게 고쳐야 할지 모르겠어.스프링, 하이버네이트, 잭슨을 쓰고 있어요.

저는 이미 로딩이 느려서 문제가 생긴다고 생각했지만, 잭슨에게 다음과 같이 다양한 속성을 처리하지 않도록 조치했습니다.

@JsonIgnoreProperties({ "sentMessages", "receivedMessages", "educationFacility" })
public class Director extends UserAccount implements EducationFacilityUser {
   ....
}

다른 모든 User Account 서브클래스에서도 같은 작업을 수행했습니다.

다음은 예외입니다.

org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: java.util.ArrayList[46]->jobprep.domain.educationfacility.Director_$$_javassist_2["handler"])
    at org.codehaus.jackson.map.ser.StdSerializerProvider$1.serialize(StdSerializerProvider.java:62)
    at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268)
    at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146)
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118)
    at org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:236)
    at org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:189)
    at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:111)
    at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:296)
    at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:224)
    at org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:925)
    at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.writeInternal(MappingJacksonHttpMessageConverter.java:153)

이 문제의 원인을 확인하기 위해 더 많은 정보를 얻을 수 있는 방법에 대해 제안해 주시겠습니까?고칠 줄 아는 사람?

편집: 프록시 오브젝트에 getHander() 및 기타 get*() 메서드가 존재하는 것을 발견했습니다.GRR!!잭슨에게 프록시에서 아무것도 처리하지 말라고 할 수 있는 방법이 있을까요? 아니면 제가 해결한 건가요?JSON을 뱉는 방식은 특정 상황에서만 크래시되며 항상 크래시되는 것은 아니기 때문에 이는 매우 이상합니다.단, 프록시 오브젝트의 get*() 메서드에 의한 것입니다.

제쳐두고: 프록시는 사악하다.이들은 Jackson, equals() 및 일반 Java 프로그래밍의 많은 다른 부분을 중단시킵니다.나는 완전히 동면기를 버리고 싶다:/

hibernate 프록시 오브젝트를 통한 로딩이 느릴 때도 같은 문제가 있었습니다.개인 속성을 느리게 로드한 클래스에 주석을 달아 문제를 해결했습니다.

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

프록시 오브젝트의 속성을 추가하여 JSON의 시리얼화를 중단시킬 수 있습니다.

가져오기되지 않은 지연 개체에서 잭슨 직렬화 방지

잭슨의 JSON하려면 JSON을 사용해야 .@JsonAutoDetect클래스 레벨로.이렇게 하면 Javassist 문제를 처리하려고 시도하거나 실패하는 것을 방지할 수고를 덜 수 있습니다.

각 에 수동으로 을 붙여야 (「」, 「getter」로).@JsonProperty그렇다고 해서 반드시 나쁜 것만은 아닙니다.이치노

같은 에러가 발생했지만, 휴지 상태와는 관계가 없습니다.모든 무서운 제안들 때문에 겁이 났어요. 겨울잠이나 게으른 로딩과 관련이 있을 것 같아요.단, 내 경우 내부 클래스에서는 getter/setters가 없기 때문에 Bean Serializer가 데이터를 시리얼화할 수 없었기 때문에 오류가 발생했습니다.

getters와 setters를 추가하면 문제가 해결되었습니다.

Jackson Hibernate 모듈 프로젝트는 이제 막 시작되었으며, 이 문제는 물론 다른 문제들도 해결할 수 있을 것입니다.프로젝트는 Jackson 프로젝트와 관련이 있지만 핵심 소스의 일부는 아닙니다.이는 대부분 보다 단순한 릴리스 프로세스를 가능하게 하기 위한 것으로 모듈 API가 도입될 때 Jackson 1.7이 필요합니다.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★하고 있는지 합니다.hibernatesession.load()이 로 .hibernatesession.get()이치노

다른 답변과 마찬가지로 다대일 컬럼을 선언하여 게으른 페치를 하는 것이 문제였습니다.신속한 취득으로 전환하면 문제가 해결.이전:

@ManyToOne(targetEntity = StatusCode.class, fetch = FetchType.LAZY)

그 후:

@ManyToOne(targetEntity = StatusCode.class, fetch = FetchType.EAGER)

가 있었습니다.@RestController의의 spring . .llerller . .ller . . .llerllerller was was was JpaRepository및를 " " "로 치환하여"repository.getOne(id) 콜('')repository.findOne(id)제는없없 없없없다다

이 문제를 해결하려면 jackson-datatype-hibernate 모듈을 사용할 수 있습니다.도움이 됩니다.참조 자료: https://github.com/FasterXML/jackson-datatype-hibernate

하면 .@JsonIgnoreProperties(value = { "handler", "hibernateLazyInitializer" })의 "감독님

나도 같은 문제가 있어, 여기 인사말이 있어

가져오기되지 않은 지연 개체에서 잭슨 직렬화 방지

http://blog.pastelstudios.com/2012/03/12/spring-3-1-hibernate-4-jackson-module-hibernate/

https://github.com/nessonqk/jackson-datatype-hibernate

Object.class에 잭슨 믹스인을 추가하여 항상 휴지 상태 관련 속성을 무시할 수 있습니다.Spring Boot을 사용하는 경우 응용 프로그램클래스에 다음 내용을 입력합니다.

@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
    Jackson2ObjectMapperBuilder b = new Jackson2ObjectMapperBuilder();
    b.mixIn(Object.class, IgnoreHibernatePropertiesInJackson.class);
    return b;
}


@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
private abstract class IgnoreHibernatePropertiesInJackson{ }

저는 "org.codehouse.jackson.map"을 받았을 때 잭슨 API를 처음 접하게 되었습니다.Json Mapping Exception:com.company.project 클래스의 시리얼라이저를 찾을 수 없습니다.yourclass" , getter 와 setter 를 com.company. 프로젝트에 추가했습니다.yourclass는 ObjectMapper의 Mapper 객체를 사용하여 Java 객체를 플랫파일에 쓸 수 있도록 도와줬습니다.

저는 같은 문제에 직면했는데, 같은 코드가 몇 가지 경우에는 동작하지만, 어떤 경우에는 동작하지 않는 것이 매우 이상합니다.

적절한 셋터/게터(대문자와 소문자를 구분하여)를 확인함으로써 수정했습니다.

는 는 i i는노노 i i i i i.@JsonDetect...

@JsonIgnoreProperties(value = { "handler", "hibernateLazyInitializer" })

이 노래하다서드파티 모듈을 사용하는 것은 저에게 매우 힘든 일인 것 같습니다. 저는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」get에게 전달하기 전에 게으른 물건의 어떤 재산이라도 찾아내다jacksonserlization을 위해.동작 코드 스니펫은 다음과 같습니다.

@RequestMapping(value = "/authenticate", produces = "application/json; charset=utf-8")
    @ResponseBody
    @Transactional
    public Account authenticate(Principal principal) {
        UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = (UsernamePasswordAuthenticationToken) principal;
        LoggedInUserDetails loggedInUserDetails = (LoggedInUserDetails) usernamePasswordAuthenticationToken.getPrincipal();
        User user = userRepository.findOne(loggedInUserDetails.getUserId());
        Account account = user.getAccount();
        account.getFullName();      //Since, account is lazy giving it directly to jackson for serlization didn't worked & hence, this quick-fix.
        return account;
    }

또한 도메인 개체 Director를 최종화할 수도 있습니다.완벽한 솔루션은 아니지만 도메인 클래스의 프록시 하위 클래스를 만드는 것을 방지합니다.

언급URL : https://stackoverflow.com/questions/4362104/strange-jackson-exception-being-thrown-when-serializing-hibernate-object

반응형