解析对复杂 DTO 的响应?

Parse response to complex DTO?

这简直让我头晕目眩,因为我找不到解决这个问题的好方法: 我正在处理像这样的复杂响应。

{
"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 class:

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 迭代,但我想使用其他类型的方法,但不知道有什么,你会推荐什么?

在这种情况下,DTO 可能与响应完全相同,但它们也可能不同。

谢谢

这实际上取决于您将如何使用它以及您将要实现什么。

如果你只是想从那里获取一些值,你可以将它反序列化为一棵树。 我相信,你正在使用杰克逊。所以你可以使用 ObjectMapper#readTree 并且你不需要有那么多的DTO。但作为一个缺点,使用响应操作会不太方便。

换句话说,如果您不需要响应中的所有值,您可以使用仅包含已用字段的 DTO,并使用 @JsonIgnoreProperties(ignoreUnknown = true) 忽略其他字段。

如果你需要所有的数据,比如在上面做一些业务登录,那么有这样的 DTO 会更方便,即使编写它们似乎是样板文件。