Moja klasa AssignedPropertiesDTO to:

@Data
@Builder
@AllArgsConstructor
public class AssignedPropertiesDTO {

  @JsonProperty("hotel_id")
  private Long hotelId;

  @JsonProperty("oyo_id")
  private String oyoId;

  @JsonProperty("drn")
  private Integer dsrn;

  @JsonProperty("is_sold_out")
  private Boolean isSoldOut;

  @JsonProperty("is_purged")
  private Boolean isPurged;

  AssignedPropertiesDTO() {
    this.isSoldOut = false;
    this.isPurged = false;
  }

}

Muszę ustawić isSoldOut i isPurged na false. Dlatego zrobiłem domyślny konstruktor. Ale używam Builder () do ustawiania pól klas i gdzieś po prostu ustawiania właściwości za pomocą getter / setter.

  AssignedPropertiesDTO matchingObject = assignedPropertiesDTOS.stream()
      .filter(assignedPropertiesDTO ->
          assignedPropertiesDTO.getHotelId().equals(Long.valueOf(entry.getKey())))
      .findFirst().orElse(null);
  if (matchingObject == null) {
    assignedPropertiesDTOS.add(AssignedPropertiesDTO
        .builder().hotelId(Long.valueOf(entry.getKey())).dsrn(count).build());
  } else {
    matchingObject.setDsrn(count);
  }

Moim wymaganiem jest ustawienie Ispurged / IsSoldOut na True / False, ale nie NULL.

[      {
                "hotel_id": 45693,
                "oyo_id": "GOA2161",
                "drn": null,
                "is_sold_out": null,
                "is_purged": null
            },
            {
                "hotel_id": 45693,
                "oyo_id": "GOA2161",
                "drn": null,
                "is_sold_out": true,
                "is_purged": false
            } ]

Proszę, prowadź mnie, jak mam to zrobić.

1
Pooja Verma 31 marzec 2020, 23:14

3 odpowiedzi

Najlepsza odpowiedź

@Builder tworzy dla Ciebie konstruktor składający się z wszystkich argumentów; nie wie o wartościach innych niż domyślne wymagane dla isSoldOut i isPurged. Możesz użyć do tego funkcji @Builder.Default: na przykład @Builder.Default private Boolean isSoldOut = false;.

Alternatywnie, po prostu ustaw je małymi literami b jako wartość logiczną, a „false” będzie teraz naturalnym ustawieniem domyślnym. Jeśli to w ogóle opcja, jest to zdecydowanie najlepsze rozwiązanie tutaj.

Ostatnią opcją jest samodzielne utworzenie konstruktora wszystkich argumentów.

2
rzwitserloot 31 marzec 2020, 20:24

Kiedy zdefiniujesz isPurged i isSoldOut jako boolean zamiast jako Boolean, zmienne zostaną zainicjalizowane jako false domyślnie (zgodnie z Twoim konstruktorem).

Jeśli potrzebujesz kolejnej inicjalizacji, możesz ją po prostu zdefiniować deklarując zmienną, np. ustawianie jednego na prawdę, drugiego na fałsz:

Data
@Builder
@AllArgsConstructor
public class AssignedPropertiesDTO {

  @JsonProperty("is_sold_out")
  private boolean isSoldOut = true;

  @JsonProperty("is_purged")
  private boolean isPurged = false;
}
1
Ralf Wagner 31 marzec 2020, 20:29

Czy próbowałeś przypisać wartościom logicznym wartości domyślne? Warto zauważyć, że domyślną wartością logiczną jest fałsz. Ponadto użyj wartości logicznej, a nie wartości logicznej, aby nie obsługiwała wartości null.

W niepowiązanej notatce zwykle nie podaje się nazw logicznych zaczynających się od „is”. Zwykle pozostawia się to akcesorowi.

@JsonProperty("sold_out")
private boolean soldOut;
1
Jason 31 marzec 2020, 20:24