๐Ÿ– Error : InvalidDefinitionException: No serializer found for class

ERROR 18904 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.coderder.colorMeeting.dto.response.ResponseDto["data"]->java.util.ArrayList[0]->com.coderder.colorMeeting.model.Team$HibernateProxy$TrUXNCSE["hibernateLazyInitializer"])] with root cause

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.coderder.colorMeeting.dto.response.ResponseDto["data"]->java.util.ArrayList[0]->com.coderder.colorMeeting.model.Team$HibernateProxy$TrUXNCSE["hibernateLazyInitializer"])
		at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.13.3.jar:2.13.3]
		at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1300) ~[jackson-databind-2.13.3.jar:2.13.3]
		at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) ~[jackson-databind-2.13.3.jar:2.13.3]
		at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:46) ~[jackson-databind-2.13.3.jar:2.13.3]
		at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:29) ~[jackson-databind-2.13.3.jar:2.13.3]
		at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.3.jar:2.13.3]
		...

fetchType์€ DB์—์„œ ์—”ํ‹ฐํ‹ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๋งคํ•‘๋˜์–ด์žˆ๋Š” ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์˜ ์ •๋ณด๋ฅผ ์–ด๋А ์‹œ์ ์— ๊ฐ€์ ธ์˜ฌ์ง€๋ฅผ ์ •ํ•˜๋Š” ์˜ต์…˜์ธ๋ฐ, ์šฐ๋ฆฌ ํŒ€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  Entity์˜ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ fetchType = Lazy๋กœ ์„ค์ •ํ•˜์˜€๋‹ค.

1์ฐจ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—๋Š” ์ด 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. application.properties์—ย spring.jackson.serialization.fail-on-empty-beans=falseย ์ถ”๊ฐ€ํ•˜๊ธฐ

    ๐Ÿ‘‰๐Ÿป ๊ทธ๋Ÿฌ๋‚˜ ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ์•„๋‹Œ ํ‘œ๋ฉด์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์„ ์œ„ํ•ด์„  JSONํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ• ์ง€ ๋ง์ง€์— ๋Œ€ํ•ด ์ •ํ•ด์•ผํ•œ๋‹ค.

  2. ์ €์žฅ ์„ฑ๊ณตํ•œ ๊ฐ์ฒด๋ฅผ ํ™•์ธ์‹œํ‚ค๊ธฐ์œ„ํ•œย JSON response์—์„œย ํ•ด๋‹น column์„ ์ œ์™ธํ•˜๊ณ  ๋ณด๋‚ธ๋‹ค. (@JsonIgnoreย ์‚ฌ์šฉ)

    ๐Ÿ‘‰๐Ÿป FetchType์€ Lazy๋กœ ์œ ์ง€ํ•˜๊ณ  ์˜ค๋ฅ˜์˜ ์›์ธ๋„ ์ œ๊ฑฐ ๊ฐ€๋Šฅ

  3. fetchType์ž์ฒด๋ฅผ EAGER๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

    ๐Ÿ‘‰๐Ÿป ์ด ๊ฒฝ์šฐ, EAGER๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ TeamMEmber๋งŒ ์กฐํšŒํ•˜๊ณ  ์‹ถ๋”๋ผ๋„ ๊ฐ Team, Member์˜ ์ •๋ณด๊นŒ์ง€ ๋ชจ๋‘ ์กฐํšŒํ•˜๊ฒŒ ๋œ๋‹ค.

์‹œ๋„ 1

๋น„๊ตํ•ด๋ณด์•˜์„ ๋•Œ 2๋ฒˆ์ด ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๊ฐ™์ง€๋งŒ ํ•ด๋‹น ํด๋ž˜์Šค๋“ค์˜ ๋ชจ๋“  ์—ฐ๊ด€๊ด€๊ณ„ column์— @JsonIgnore๋ฅผ ๋ถ™์˜€์Œ์—๋„ ์—๋Ÿฌ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1๋ฒˆ์„ ์ ์šฉํ•˜๋ฉด response๊ฐ€ ์˜ค๊ธด ์˜ค๋Š”๋ฐ, ์ฒ˜์Œ ๋ณด๋Š” ํ•„๋“œ๊ฐ€ ํ•จ๊ป˜ response๋˜์—ˆ๋‹ค.

{
    "success": true,
    "data": [
        {
            "id": 1,
            "name": "coderder",
            "hibernateLazyInitializer": {}
        },
        {
            "id": 2,
            "name": "์„œ์šธ 9์กฐ",
            "hibernateLazyInitializer": {}
        },
        {
            "id": 3,
            "name": "์ฝ”ํ…Œ์Šคํ„ฐ๋”” Algogazaa",
            "hibernateLazyInitializer": {}
        },
        {
            "id": 13,
            "name": "์‚ฌ์ด๋“œํ”„๋กœ์ ํŠธํŒ€",
            "hibernateLazyInitializer": {}
        }
    ],
    "error": null
}