java - Jackson serialization: ignore empty values (or null) -
i'm using jackson 2.1.4 , i'm having trouble ignoring fields when i'm converting object json string.
here's class acts object converted:
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; } } } and here's how convert it:
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()) here's output:
{"data":{"birthday":null,"coins":null,"coinspackage":null,"email":null,"username":"vincent","password":"test","transactionid":null,"isloggedin":false},"requesttype":"login"} how can avoid null values? want take required information "subscription" purpose!
here's output i'm looking for:
{"data":{"username":"vincent","password":"test"},"requesttype":"login"} i tried @jsoninclude(include.non_null) , put variables null, didn't work either! guys!
you have annotation in wrong place - needs on class, not field. i.e:
@jsoninclude(include.non_null) //or include.non_empty, if fits use case public static class request { // ... } as noted in comments, in version 2.x+ syntax annotation is:
@jsoninclude(jsonserialize.inclusion.non_null) // or jsonserialize.inclusion.non_empty the other option configure objectmapper directly, calling mapper.setserializationinclusion(include.non_null);
(for record, think popularity of answer indication annotation should applicable on field-by-field basis *ahem @fasterxml*)
Comments
Post a Comment