J’ai une matrice JSON comme celle indiquée ci-dessous, que j’ai besoin de le sérialiser dans ma classe. J’utilise Jackson sur mon projet.
dans la matrice JSON précédente, clientValue
aura un autre JSON objet sur elle. Comment puis-je sérialiser ma matrice JSON précédente dans ma classe Java en utilisant 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}
Je n’ai pas utilisé Jackson avant, donc je ne sais pas comment puis-je Utilisez-le pour sérialiser ma matrice JSON dans des objets Java? J’utilise l’annotation de Jackson ici pour sérialiser les choses, mais je ne suis pas sûr de l’étape suivante.
réponses
1 pour la réponse № 1
peut créer une fonction d’utilité qui est résolu ci-dessous. Vous voudrez peut-être modifier la fonction de désérialisation en fonction de vos besoins professionnels. Dans mon cas, je ne voulais pas échouer dans des propriétés inconnues = > (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;}
peut l’appeler à l’aide d’une approche similaire comme indiqué ci-dessous:
mapJson(clientValueJsonString,new com.fasterxml.jackson.core.type.TypeReference<List<DataRequest>>(){});
1 pour la réponse № 2
Vous pouvez essayer @JsonAnyGetter
et @JsonAnySetter
annotations avec un objet de classe interne. Le nom de la chaîne doit également avoir le type de chaîne, pas 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;}}