카테고리 없음

Spring 웹 클라이언트를 통해 API JSON 응답을 구문 분석하기 위해 DTO에 Setter가 필요합니까?

기록만이살길 2021. 2. 25. 19:03
반응형

Spring 웹 클라이언트를 통해 API JSON 응답을 구문 분석하기 위해 DTO에 Setter가 필요합니까?

1. 질문(문제점):

API를 호출하고 응답을 검색하고 DTO로 구문 분석하는 애플리케이션에서 작업 중입니다. 이제 내가 정의한 응답 DTO는 다음과 같습니다.

@Getter
@JsonIgnoreProperties(ignoreUnknown = true)
public class ObservationsResponse {
    private Integer count;
    private Long retrieval_date;
    private List<Observation> observations;
}

API 응답에서 파싱 한 후 DTO가 채워지면 속성을 가져 오기만하면되기 때문에 게터 만 정의했습니다.

질문에 도달하면 내 웹 클라이언트가 DTO에 대한 응답을 구문 분석 할 수 있도록 여기에서도 setter를 정의해야합니까? 웹 클라이언트는 관련 속성을 설정하기 위해 setter를 사용합니까, 아니면 다른 메커니즘을 통해 수행됩니까 (우리가 액세스하려는 필드이므로 여기에서 리플렉션을 통해 수행 할 수 있다고 생각하지 않습니다. 내가 틀렸다면 수정하십시오) ).

API 요청에 스프링 웹 클라이언트를 사용하고 있습니다.

webClient.get().uri(uri).retrieve()
                .onStatus(httpStatus -> !HttpStatus.OK.is2xxSuccessful(), ClientResponse::createException)
                .bodyToMono(ReviewPageResponse.class)
                .retryWhen(Constant.RETRY_BACKOFF_SPEC)
                .block();

2. 해결방안:

실제로 값을 설정하는 방법을 제공해야합니다.

대부분의 코덱은 Java Bean 규칙을 지원합니다. 즉, 기본 생성자를 사용하고 setter를 사용하여 값을 설정합니다.

JSON의 경우 Spring WebClient는 대안을 지원하는 Jackson2JsonDecoder를 사용하지만 추가 코드가 필요합니다.

예를 들어 @JsonCreator를 사용하는 경우 setter가 필요하지 않습니다.

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;


@Getter
@JsonIgnoreProperties(ignoreUnknown = true)
public class GenericHttpError {

  @JsonCreator
  public GenericHttpError(@JsonProperty("type") String type, @JsonProperty("message") String message,
        @JsonProperty("causes") List<String> causes, @JsonProperty("code") int code,
        @JsonProperty("details") List<Detail> details) {

    this.type = type;
    this.message = message;
    this.causes = causes;
    this.code = code;
    this.details = details;
  }
65807205
반응형