0
我有一個Camel端點,它返回屬性爲JSON,但沒有正確的順序。 return類有一個超類,它返回一些控制數據,這些數據在每個返回中都必須存在。Apache Camel - 在路由上使用GSON JsonSerializer
public class Respuesta implements Serializable {
@SerializedName("subject")
@Expose
private String subject;
@SerializedName("action")
@Expose
private String action;
@SerializedName("status")
@Expose
private Integer status;
@SerializedName("description")
@Expose
private String description;
...getter/setter
而最終的返回類繼承那一塊。
public class FacturadoresListarResponse extends Respuesta implements Serializable {
@SerializedName("lst")
@Expose
private List<Facturador> listaProveedores;
public FacturadoresListarResponse(List<Facturador> listaProveedores) {
super();
this.listaProveedores = listaProveedores;
}
public FacturadoresListarResponse() {
}
public void setRespuesta(Respuesta rsp) {
super.setAction(rsp.getAction());
super.setDescription(rsp.getDescription());
super.setStatus(rsp.getStatus());
super.setSubject(rsp.getSubject());
}
getter/setter...
}
所以,GSON的第一次的Marshaller需要繼承的類屬性(LST),然後父類屬性(主體,狀態等),使這種結果的絲。
{
"lst": [
{
"rut": "XXXX-X",
"rzsoc": "XXXXXXx",
"res": 1,
"ema": "[email protected]"
}
],
"subject": "facturadores",
"action": "listar",
"status": 0,
"description": "OK"
}
我寫了一個GSON自定義JsonSerializer,它按順序構建數據,但我不能在Camel DSL語法中使用。我試過,但沒有結果:
.marshal().json(JsonLibrary.Gson,FacturadoresListarRspSerializer.class, true)
.convertBodyTo(String.class, "UTF-8")
是否存在被駱駝支持,能夠使用這些類型的串行器來實現正確的順序不遷移到傑克遜?
注意:序列化程序的代碼(FacturadoresListarRspSerializer.class)。
public class FacturadoresListarRspSerializer implements JsonSerializer<FacturadoresListarResponse> {
@Override
public JsonElement serialize(FacturadoresListarResponse src, Type typeOfSrc, JsonSerializationContext context) {
final JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("subject", src.getSubject());
jsonObject.addProperty("action", src.getAction());
jsonObject.addProperty("status", src.getStatus());
jsonObject.addProperty("description", src.getDescription());
final JsonArray jsarrFacturadores = new JsonArray();
for (final Facturador fact : src.getListaProveedores()) {
JsonObject jsobFacturadores = new JsonObject();
jsobFacturadores.addProperty("rut", fact.getRutCompleto());
jsobFacturadores.addProperty("rzsoc", fact.getRazonSocial());
jsobFacturadores.addProperty("res", fact.getResolucion());
jsobFacturadores.addProperty("ema", fact.getCorreoEnvio());
jsarrFacturadores.add(jsobFacturadores);
}
jsonObject.add("lst", jsarrFacturadores);
return jsonObject;
}
}
謝謝!它按正確的順序給出了預期的響應。 –