>  기사  >  DTO 직렬화 중 Spring Boot 애플리케이션의 StackOverflowError 문제

DTO 직렬화 중 Spring Boot 애플리케이션의 StackOverflowError 문제

王林
王林앞으로
2024-02-05 23:06:04614검색
질문 내용

자기 참조 관계를 사용하여 dto 클래스(nodeattributesdto)를 직렬화하려고 하면 스프링 부트 애플리케이션에서 stackoverflowerror가 발생합니다. dto 클래스에서 tostring 메소드를 실행하는 동안 오류가 발생합니다.

nodeattributes.java:

으아악

nodeattributesdto.java:

으아악

사후 매핑 요청 텍스트:

으아악

오류:

으아악

질문:

  1. 직렬화 중에 스택오버플로 오류를 방지하기 위해 nodeattributesdto 클래스의 tostring 메서드를 수정하는 방법은 무엇입니까?
  2. dtos에서 자기 참조 관계를 처리할 때 고려해야 할 특정 jackson 주석이나 구성이 있습니까?

환경: 스프링 부트 버전: 2.7.2 자바 버전: 17 데이터베이스: postgresql

내가 시도한 것:

  • 다른 잭슨 주석(@jsonmanagedreference, @jsonbackreference)

정답


ToString이 Spring Boot에서 마샬링을 제어하지 않는다는 점에 혼란을 겪고 계신 것 같습니다.

System.err.println()을 통해 이 객체를 표준 오류에 기록하려는 경우 toString을 사용합니다.

toString이 기본적으로 데이터의 재귀적 덤프를 시도하는 것처럼 보이지만 이는 올바르지 않습니다. 나는 그것이 단지 기본적인 Java/CS라고 생각합니다.

toString에서는 현재 노드의 데이터를 인쇄한 다음 모든 하위 노드에서 toString(delagate)을 호출할 수 있습니다. 이 작업이 가능해야 합니다. 나는 일반적으로 "트리"의 맨 위에서 시작하기 때문에 역참조(toString에 대한)가 필요하지 않다고 생각합니다.

마샬러는 객체를 검사하고 리플렉션을 사용하여 직렬화된 표현을 구성합니다. 아시다시피 특정 주석을 존중합니다. 예를 들어 @JsonIgnore입니다.

참조: json에서 필드 응답을 무시하는 방법은 무엇입니까?

여기에 좋은 정보가 많이 있습니다: https://www.php.cn/link/ffe4a40fecc90fa1120088e704712fb2

코드 생성 도구(예: jhipster) 외부에서 간단한 웹 서비스를 생성하여 뒤에서 무슨 일이 일어나고 있는지 이해하고 생성을 더 효과적으로 제어하는 ​​데 도움이 될 수도 있습니다.

위 내용은 DTO 직렬화 중 Spring Boot 애플리케이션의 StackOverflowError 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제