How to remove a property name of a JSON with @JsonValue without deleting more properties of my object

81 Views Asked by At

I try to make a JSON with a 3 propertys, "items", "status" and "id", but if i use @JsonValue, my JSON don't take "status" and "id"; How can i make this, it's possible?

I want My JSON this way without property name "items"

{
  [
    {
      "property1": "property",
      "property2": "property"
    }
  ],
  "Status": {
    "code": "code",
    "messages": [
      {
        "message1": "message",
        "message2": "message"
      }
    ]
  },
  "id": "123"
}

instead of this

{
  "items": [
    {
      "property1": "property",
      "property2": "property"
    }
  ],
  "Status": {
    "code": "code",
    "messages": [
      {
        "message1": "message",
        "message2": "message"
      }
    ]
  },
  "id": "123"
}

My classes

public class RetrieveResponse {
//@JsonUnwrapped even i try this.
@JsonValue
 private List<Response> items;
 private String Status status;
 private String id;

}
public class Status {
 private String code code;
 private List<Message> message;

}

And finally try with serializer but if i have more list the service its sending me a exception

public class ResponseSerializer extends JsonSerializer<List<Response>> {
    public static final TypeFactory TYPE_FACTORY = TypeFactory.defaultInstance();
    public static final JavaType LIST_TYPE = TYPE_FACTORY.constructCollectionType(List.class, Response.class);


    @Override
    public void serialize(List<Response> responses, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartArray();
        for (Response item : responses) {
            responses.remove("priceConcept");
            jsonGenerator.writeObject(item);
        }
        jsonGenerator.writeEndArray();
    }

    @Override
    public Class<List<Response>> handledType() {
        return (Class<List<Response>>) LIST_TYPE.getRawClass();
    }
}

0

There are 0 best solutions below