[Spring Boot] java.lang.IllegalArgumentException: Unrecognized field 해결 방법

sy·2023년 1월 5일
0
post-custom-banner

📌 오류 내용
java.lang.IllegalArgumentException: Unrecognized field
through reference chain: Dto["num"]

Object로 된 데이터를 String으로 변환 후 JSONObject로 변환하여 Dto로 넘겨서 데이터베이스에 저장하려고 하였으나 Dto에서 nullpointerException을 만났다. Service에서 하나씩 null을 잡아서 Dto로 보낼까 하다가 아닌 것 같아서 다른 방법을 찾아보았다.
Object -> String -> JSONObject -> DTO

Object를 String으로 변환 후 objectMapper.readValue를 이용하여 Dto로 넘겼으나 넘어오는 외부API 데이터가 필요한 것보다 너무 많아서 모든 데이터를 받지 않고 필요한 데이터만 받았더니 위와 같은 에러가 나왔다.
Object -> String -> DTO

PaymentRequestDto paymentRequestDto = objectMapper.readValue(jsonStr, PaymentRequestDto.class);

Dto 클래스에 @JsonIgnoreProperties(ignoreUnknown = true)를 붙여주면 클래스에 정의된 필드만 받는다.

내가 사용한 해결 방법

@JsonIgnoreProperties(ignoreUnknown = true)
public class PaymentRequestDto {
	private String name;
    .
    .
    생략
    .
    .
}

해결 방법

1. DTO Class에서 @JsonIgnoreProperties(ignoreUnknown = true) 선언

선언한 필드 외에 모든 요소 제외

@JsonIgnoreProperties(ignoreUnknown = true)
public class PaymentRequestDto {
	private String name;
}

2. DTO Class에서 @JsonIgnoreProperties({"제외할 NAME"}) 선언

특정 요소 제외

@JsonIgnoreProperties({"num"})
public class PaymentRequestDto {
	private String name;
}

3. ObjectMapper 옵션 설정

ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
post-custom-banner

0개의 댓글