Tinc una matriu JSON com la que es mostra a continuació, la qual necessito per serializarla a la meva classe. Estic usant Jackson en el meu projecte.
A la matriu JSON anterior, clientValue
tindrà un altre objecte JSON en ell . Com puc serialitzar el meu matriu JSON anterior a la meva classe java usant 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}
No he fet servir Jackson abans, així que no estic seguro¿Cómo puc usar-lo per serialitzar la meva matriu JSON en objectes Java? Estic usant l’anotació de Jackson aquí per serialitzar coses però no estic segur de quin serà el meu proper pas.
Respostes
1 per a la resposta № 1
Podeu crear una funció d’utilitat que es mostra a continuació. És possible que vulgueu canviar la funció de deserialització segons les seves necessitats comercials. En el meu cas, no vaig voler fallar en propietats desconegudes = > (FAIL_ON_UNKNOWN_PROPERTIES, fals)
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;}
Podeu anomenar utilitzant un enfocament similar com es mostra a continuació:
mapJson(clientValueJsonString,new com.fasterxml.jackson.core.type.TypeReference<List<DataRequest>>(){});
1 per a la resposta № 2
Pots provar @JsonAnyGetter
i @JsonAnySetter
anotacions amb un objecte de classe interior. També clientname ha de tenir el tipus String, no 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;}}