Teño unha matriz JSON como a que se mostra a continuación, que teño que serializalo na miña clase. Estou a usar Jackson no meu proxecto.
Na matriz JSON anterior, clientValue
terá outro json obxecto nel. Como podo serializar a miña matriz de JSON anterior na miña clase Java usando Jackson?
public class DataRequest {@JsonProperty("clientId")private String clientId;@JsonProperty("clientName")private int clientName;@JsonProperty("clientKey")private String clientKey;@JsonProperty("clientValue")private Map<String, Object> clientValue;//getters and setters}
Non teño usado Jackson antes, entón eu non estou seguro de como podo eu Usa-lo para serializar a miña matriz JSON en obxectos Java? Estou a usar a anotación de Jackson aquí para serializar as cousas, pero non estou seguro de que será o meu seguinte paso.
respostas
1 para a resposta № 1
pode crear unha función de utilidade que resólvese a continuación. Pode querer cambiar a función de deserencialización segundo as necesidades da súa empresa. No meu caso, non quería fallar en propiedades descoñecidas = > (falil_on_unknown_properties, false)
static <T> T mapJson(String body,com.fasterxml.jackson.core.type.TypeReference<T> reference) {T model = null;if(body == null) {return model;}com.fasterxml.jackson.databind.ObjectMapper mapper =new com.fasterxml.jackson.databind.ObjectMapper();mapper.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);try {model = mapper.readValue(body, reference);} catch (IOException e) {//TODO: log error and handle accordingly}return model;}
pode chamalo usando un enfoque semellante como se mostra a continuación:
mapJson(clientValueJsonString,new com.fasterxml.jackson.core.type.TypeReference<List<DataRequest>>(){});
1 para a resposta № 2
Pode probar e @JsonAnySetter
con anotacións con un obxecto de clase interior. Tamén o nome de cliente debe ter o tipo de cadea, non int.
public class DataRequest {private String clientId;private String clientName;private String clientKey;private ClientValue clientValue;//getters and setters}public class ClientValue {private Map<String, String> properties;@JsonAnySetterpublic void add(String key, String value) {properties.put(key, value);}@JsonAnyGetterpublic Map<String,String> getProperties() {return properties;}}