从字面上看,这使我很震惊,因为我找不到解决这个问题的好方法:我正在处理类似这样的复杂回复。
{
"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可能与响应完全一样,但它们也可能有所不同。
谢谢
这实际上取决于您将如何使用它以及您将要实现什么。
如果只想从那里获取一些值,则可以将其反序列化为树。我相信您正在使用Jackson。因此,您可以使用ObjectMapper#readTree
,并且不需要大量DTO。但是作为缺点,使用响应进行操作不太方便。
其他方式,如果不需要响应中的所有值,则可以使DTO仅具有使用的字段,并使用@JsonIgnoreProperties(ignoreUnknown = true)
忽略其他字段。
如果您需要所有数据,例如要进行一些业务登录,那么拥有这种DTO会更加方便,即使看起来很容易编写它们。