Oleksandr Onopriienko
Oleksandr Onopriienko

Reputation: 139

How do I have two identical json property names assigned to two separated fields

I have the following Java class enter image description here

I need to serialize it to json in the following way:

if the list(paymentTransactionReport field) is not null display it values -

{ 
"paymentTransactionResponse" : [
    {},
    {}
  ]
}

if the list is null I need to display the paymentTransactionReportError in json field with name 'paymentTransactionResponse', as in previous case. Example -

{
"paymentTransactionResponse" : {
----
//fields from PaymentTransactionReportError class
----
  }
}

How can I do this?preferably without custom serializers. If use just two annotations @JsonProperty with the same name and JsonInclude.NON_NULL as I did, I have this error: No converter found for return value of type:... Seems to be that is a error happened during serialization because of fields with the same name

Upvotes: 4

Views: 2135

Answers (1)

Yuvaraj G
Yuvaraj G

Reputation: 1237

One way you can achieve this is, using @JsonAnyGetter, Try this

public class TestDTO {

@JsonIgnore
List<String> paymentTransactionResponse;

@JsonIgnore
String paymentTransactionResponseError;

public List<String> getPaymentTransactionResponse() {
    return paymentTransactionResponse;
}

public void setPaymentTransactionResponse(List<String> paymentTransactionResponse) {
    this.paymentTransactionResponse = paymentTransactionResponse;
}

public String getPaymentTransactionResponseError() {
    return paymentTransactionResponseError;
}

public void setPaymentTransactionResponseError(String paymentTransactionResponseError) {
    this.paymentTransactionResponseError = paymentTransactionResponseError;
}

@JsonAnyGetter
public Map<String, Object> getData(){
    Map<String, Object> map = new HashMap<String, Object>();
    if(paymentTransactionResponse != null) {
        map.put("paymentTransactionResponse", paymentTransactionResponse);
    }else {
        map.put("paymentTransactionResponse", paymentTransactionResponseError);
    }
    return map;
}}

Upvotes: 2

Related Questions