Coding Planet
No serializer found for class - @JsonProperty๋ก ํด๊ฒฐ ๋ณธ๋ฌธ
No serializer found for class - @JsonProperty๋ก ํด๊ฒฐ
jhj.sharon 2023. 10. 18. 09:46 ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ ๋ฐ์
cohttp://m.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class cohttp://m.example.demo.main.domain.Menu and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0])
1. ๋ฌธ์ ์์ธ
์คํ๋ง ๋ถํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก JSON ๋ฐ์ดํฐ์ Java ๊ฐ์ฒด ๊ฐ์ ๋ณํ์ ๋ด๋นํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก Jackson์ ์ฌ์ฉํ๊ณ ์๋ค. Jackson์ Java ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํ(Serialize)ํ๊ฑฐ๋ JSON์ Java ๊ฐ์ฒด๋ก ๋ณํ(Deserialize)ํ๋ ์์ ์ ์ํํ๋ค.
์ด ๋ณํ ์์ ์ ์ํํ ๋, Jackson์ Java ๊ฐ์ฒด์ ํ๋์ ์ง์ ์ ๊ทผํ๊ธฐ ๋ณด๋ค๋ ํด๋น ๊ฐ์ฒด์ getter ๋ฐ setter ๋ฉ์๋๋ฅผ ์ด์ฉํ๋๋ฐ ๋ง์ฝ Java ๊ฐ์ฒด์ ํ๋๊ฐ `private`๋ก ์ ์ธ๋์ด ์๊ณ ํด๋น ํ๋์ ๋ํ getter๋ setter ๋ฉ์๋๊ฐ ์ ๊ณต๋์ง ์๋๋ค๋ฉด, Jackson์ ํด๋น ํ๋์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ก, ์ด ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
์์ฝํ์๋ฉด, Jackson์ Java ๊ฐ์ฒด์ private ํ๋์ ์ ๊ทผํ๊ธฐ ์ํด getter์ setter ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ํด๋น ๋ฉ์๋๊ฐ ์์ ๊ฒฝ์ฐ JSON ๋ณํ ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
2. ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ฌธ์ ์์ธ์ ๋ฐ๋ผ Jackson์ด Java ๊ฐ์ฒด์ ์ ์์ ์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ๋ฉด ๋๋ค. 1) ObjectMapper ์ธ์คํด์ค์์ private ํ๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํ๊ฑฐ๋ 2)@JsonProperty๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ 3)@JasonAutoDetect๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด๋ฒ ์ค๋ฅ์ ๊ฒฝ์ฐ @JsonProperty๋ก ํด๊ฒฐํ๋ค.


3. @JsonProperty์ ์ฃผ์๊ธฐ๋ฅ
- ํ๋ ์ด๋ฆ ๋ณ๊ฒฝ : ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ์ง๋ ฌํํ ๋ ์ฌ์ฉํ ํ๋กํผํฐ ์ด๋ฆ์ ์ง์ ํ๊ฑฐ๋, JSON์ ๊ฐ์ฒด๋ก ์ญ์ง๋ ฌํํ ๋ ์ฌ์ฉํ ํ๋กํผํฐ ์ด๋ฆ์ ์ง์ ํ๋ค. ์ด๋ฅผ ํตํด Java ํ๋ ์ด๋ฆ๊ณผ JSON ํ๋กํผํฐ ์ด๋ฆ ์ฌ์ด์ ๋งคํ์ ๋ณ๊ฒฝํ ์ ์๋ค.
public class User {
@JsonProperty("user_name")
private String username;
}
์ ์์ ์์, Java ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํํ๋ฉด {"user_name":"...value..."}
ํํ์ JSON์ด ์์ฑ๋๋ค.
- ์ง๋ ฌํ/์ญ์ง๋ ฌํ ์ ์ ๊ทผ ์ ์ด:
@JsonProperty
๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ํ๋๊ฐ ์ง๋ ฌํ ๋ฐ/๋๋ ์ญ์ง๋ ฌํ ๋๋ ๊ฒ์ ์ ์ดํ ์ ์๋ค. ์๋ฅผ ๋ค์ด,@JsonProperty(access = Access.WRITE_ONLY)
๋ ํด๋น ํ๋๊ฐ ์ง๋ ฌํ๋์ง ์๊ฒ ํ์ง๋ง ์ญ์ง๋ ฌํ์๋ ๋ฌธ์ ๊ฐ ์๊ฒ ํฉ๋๋ค. - ์ ํ์ ์ฌ์ฉ: ํ์์ ์ผ๋ก ์ง๋ ฌํ/์ญ์ง๋ ฌํํด์ผ ํ๋ ํ๋กํผํฐ๋ฅผ ๋ช
์ํ๊ธฐ ์ํด
@JsonProperty(required = true)
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ์ค์ ํ๋ฉด ํด๋น ํ๋กํผํฐ๊ฐ ์๋ JSON์ ์ญ์ง๋ ฌํํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. - ์์ ์ง์ :
@JsonPropertyOrder
์ด๋ ธํ ์ด์ ๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ JSON ์ง๋ ฌํ ์ ํ๋กํผํฐ์ ์์๋ฅผ ์ง์ ํ ์ ์๋ค.
'๐ป Java Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ดํํฐ๋ธ ์๋ฐ]chapter2 : [์์ดํ 6] ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ํผํ๋ผ (0) | 2023.08.16 |
---|---|
jQuery, Java Script๋ก ํ์ด์ง๋ค์ด์ (pagination) ๊ตฌํํ๊ธฐ - ์ฝ๋ ํฌํจ (0) | 2023.06.29 |