解析对复杂DTO的响应?

问题描述 投票:-1回答:1

从字面上看,这使我很震惊,因为我找不到解决这个问题的好方法:我正在处理类似这样的复杂回复。

{
"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进行迭代,但是我想使用其他类型的方法,但是一无所知,您会推荐什么?

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

谢谢

java spring dto
1个回答
0
投票

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

如果只想从那里获取一些值,则可以将其反序列化为树。我相信您正在使用Jackson。因此,您可以使用ObjectMapper#readTree,并且不需要大量DTO。但是作为缺点,使用响应进行操作不太方便。

其他方式,如果不需要响应中的所有值,则可以使DTO仅具有使用的字段,并使用@JsonIgnoreProperties(ignoreUnknown = true)忽略其他字段。

如果您需要所有数据,例如要进行一些业务登录,那么拥有这种DTO会更加方便,即使看起来很容易编写它们。

© www.soinside.com 2019 - 2024. All rights reserved.