Attualmente sto usando jackson 2.1.4 e sto avendo qualche problema a ignorare i campi quando sto convertendo un oggetto in una stringa JSON.serializzazione Jackson: ignora valori vuoti (o null)
Ecco la mia classe che agisce come l'oggetto da convertire:
public class JsonOperation {
public static class Request {
@JsonInclude(Include.NON_EMPTY)
String requestType;
Data data = new Data();
public static class Data {
@JsonInclude(Include.NON_EMPTY)
String username;
String email;
String password;
String birthday;
String coinsPackage;
String coins;
String transactionId;
boolean isLoggedIn;
}
}
public static class Response {
@JsonInclude(Include.NON_EMPTY)
String requestType = null;
Data data = new Data();
public static class Data {
@JsonInclude(Include.NON_EMPTY)
enum ErrorCode { ERROR_INVALID_LOGIN, ERROR_USERNAME_ALREADY_TAKEN, ERROR_EMAIL_ALREADY_TAKEN };
enum Status { ok, error };
Status status;
ErrorCode errorCode;
String expiry;
int coins;
String email;
String birthday;
String pictureUrl;
ArrayList <Performer> performer;
}
}
}
Ed ecco come mi converto:
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
JsonOperation subscribe = new JsonOperation();
subscribe.request.requestType = "login";
subscribe.request.data.username = "Vincent";
subscribe.request.data.password = "test";
Writer strWriter = new StringWriter();
try {
mapper.writeValue(strWriter, subscribe.request);
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("JSON", strWriter.toString())
ecco l'output:
{"data":{"birthday":null,"coins":null,"coinsPackage":null,"email":null,"username":"Vincent","password":"test","transactionId":null,"isLoggedIn":false},"requestType":"login"}
Come può Evito quei valori nulli? Voglio solo prendere le informazioni richieste per lo scopo "abbonamento"!
Qui è esattamente l'output che sto cercando:
{"data":{"username":"Vincent","password":"test"},"requestType":"login"}
Ho anche provato @JsonInclude (Include.NON_NULL) e mettere tutte le mie variabili per nulla, ma non ha funzionato neanche! Grazie per il vostro aiuto ragazzi!
Non c'è davvero alcun modo per rendere attiva l'annotazione include.NON_NULL? O quello NON_EMTPY? Perché so quale sarà nullo, ma dipende dalla situazione.Sto usando la stessa classe "JsonOperation" per ogni oggetto che desidero serializzare/deserializzare e sto solo inizializzando le variabili che devo usare a seconda della situazione. È un buon modo per farlo o dovrei fare classi severali contenenti solo le variabili di cui ho bisogno (in questo modo non avrei bisogno di usare alcuna annotazione, dato che non ci sarà mai una variabile nullo/vuoto) – Shinnyx
Ahhh scusa, I guarda cosa sta succedendo ora. Vedi la mia risposta modificata. – drewmoore
Funziona! Non posso credere che sia stato il problema ... Grazie drewmore! – Shinnyx