Разобрать ответ на сложный DTO? - PullRequest
0 голосов
/ 03 мая 2020

это буквально заставляет мою голову взорваться, потому что я не могу найти красивый способ решить это: я работаю со сложными ответами, подобными этому.

{
"etiquetaPago": "1001462713         ",
"codigoAdhesion": "01",
"vencimientos": null,
"empresa": {
    "codigo": "911",
    "descripcion": "Universidad Arg. John F. Kennedy",
    "rubro": {
        "codigo": "14",
        "descripcion": "Instituciones Educativas"
    },
    "manejaBaseDeudas": false,
    "manejaMultiplesConceptos": false,
    "manejaIngresoReferencia": true,
    "manejaIngresoImportes": false,
    "habilitado": true,
    "importesFijos": null,
    "importesPosibles": null
},
"concepto": [
    {
        "codigoConcepto": "001",
        "descripcionConcepto": "Cuota",
        "tipoPago": "PAGO_IGUAL",
        "manejaIngresoReferencia": true,
        "textoIngresoReferencia": true,
        "validaLongitudReferencia": true,
        "longitudMinimaTextoReferencia": 2,
        "longitudMaximaTextoReferencia": 2,
        "manejaIngresoImportes": false,
        "manejaRango": true,
        "importeFijo": 100.0,
        "importeMinimo": 100.0,
        "importeMaximo": 100.0
     }
  ]
}

И я должен разобрать это в Класс DTO, подобный следующему:

public class ConsultaPagosAgendaResponseDTO {


    List<PagoAgendaDTO> pagosAgendas;


}

Который имеет внутри:

public class PagoAgendaDTO {

    private String etiquetaPago;
    private String codigoAdhesion;
    private EmpresaDTO empresa;
    private List<VencimientoDTO> vencimientos;
    private List<ConceptoDTO> conceptos;

}

public class EmpresaDTO {

    private String codigo;
    private String descripcion;
    private RubroDTO rubro;
    private boolean manejaBaseDeudas;
    private boolean manejaMultiplesConceptos;
    private boolean manejaIngresoReferencia;
    private boolean manejaIngresoImportes;
    private boolean habilitado;
}

И продолжается ..

Самый простой способ - сделать это вручную, итерируя с foreach, но я бы хотел go с другим типом подхода, но не знаю, что бы вы порекомендовали?

В этом случае DTO может быть именно таким ответом, но они также могут отличаться.

Спасибо

1 Ответ

0 голосов
/ 03 мая 2020

Это действительно зависит от того, как вы собираетесь его использовать и чего вы собираетесь достичь.

Если вы просто хотите взять оттуда некоторые значения, вы можете десериализовать их в дерево. Я полагаю, вы используете Джексона. Таким образом, вы можете использовать ObjectMapper#readTree, и вам не нужно будет иметь такое большое количество DTO. Но в качестве недостатка манипулировать ответом будет не совсем удобно.

Другой способ: если вам не нужны все значения из ответа, вы можете иметь DTO только с используемыми полями и использовать @JsonIgnoreProperties(ignoreUnknown = true) игнорировать других.

И если вам нужны все данные, например, для бизнес-входа на них, тогда будет удобнее иметь такие DTO, даже если это кажется шаблонным для записи их.

...