JsonParse Error - @JsonCreater

Today's μ‚½μ§ˆ

07/18/2021





❓ERROR

μŠ€ν”„λ§ AOPλ₯Ό κ΅¬ν˜„ν•˜λŠ” κ³Όμ •μ—μ„œ AOP 단에 λ„λ‹¬ν•˜κΈ° μ „λΆ€ν„° json νŒŒμ‹± μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€.

TEXT
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `noums.study.pizzahouse.enums.FoodMenu` from String "ggg"

μ²˜μŒμ—” μ™œ AOP 에 도달도 ν•˜κΈ° 전에 json νŒŒμ‹± μ—λŸ¬κ°€ λ‚˜λŠ”κ²ƒμΈμ§€ 이유λ₯Ό λͺ°λΌ ν•œμ°Έμ„ μ‚½μ§ˆν•˜μ˜€λ‹€.

결둠은 RequestBody μ—μ„œ Json 객체λ₯Ό 받아와 Enum ν΄λž˜μŠ€μ— λ§€ν•‘ν•˜λŠ” κ³Όμ •μ—μ„œ λ§€ν•‘ 였λ₯˜κ°€ λ°œμƒν•œ κ²ƒμ΄μ˜€λ‹€.




AOP 전에 JSON parse error κ°€ λ‚˜λŠ” 이유


spring

μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ μ•ˆμ—μ„œ μ‹€ν–‰μˆœμ„œλ₯Ό 보면

dispatcher servlet β†’ interceptor β†’ AOP β†’ Controller 이닀.

request body λ₯Ό μ½μ–΄μ™€μ„œ json을 νŒŒμ‹±ν•˜λŠ” κ³Όμ •μ˜ μˆœμ„œλŠ”

interceptor - requestbody json parsing β†’ AOP 이닀.

request둜 λ°›μ•„μ˜¨ json 객체가 λ¨Όμ € νŒŒμ‹±λ˜κ³  λ‚œ 뒀에 AOPλ‹¨μœΌλ‘œ λ„˜μ–΄κ°€κΈ° λ•Œλ¬Έμ—, ENUM객체와 λ§žμ§€μ•ŠλŠ” 값이 json 객체둜 λ„˜μ–΄κ°ˆ 경우 json parse error κ°€ λ‚˜λŠ” 것이닀.




πŸ’‘ν•΄κ²°λ°©μ•ˆ

Enum 클래슀 μ•ˆμ—μ„œ @JsonCreater μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ 처리λ₯Ό ν•΄μ€ŒμœΌλ‘œμ¨ json νŒŒμ‹±μ„ 컨트둀 ν•  수 있게 λœλ‹€.

JAVA
@JsonCreator
public static FoodMenu fromJson(String menu){
System.out.println(">>>>>> JsonCreater :: "+ menu);
for (FoodMenu foodMenu : FoodMenu.values()) {
if ( foodMenu.toString().equals(menu) ) {
System.out.println(">>>>>> correct !");
return foodMenu;
}
}
return null;
}

λ„˜μ–΄μ˜¨ 객체가 ENUM ν•„λ“œκ°’κ³Ό λ§žμ§€ μ•Šμ„ 경우 null 을 return ν•΄μ€€λ‹€.


WRITTEN BY

Keep It Simple, Stupid