Jackson @JsonProperty(required=true) doesn't throw an exception
jackson, java, json
Solution
As per Jackson annotations javadocs: "Note that as of 2.0, this property is NOT used by BeanDeserializer: support is expected to be added for a later minor version."
That is: no validation is performed using this settings. It is only (currently) used for generating JSON Schema, or by custom code.
Problem
I am using jackson 2.2 annotation @JsonProperty with required set to true. While deserializing json file which doesn't contain that property via ObjectMapper readValue() method no exception is being thrown. Is it supposed to work in a different way or did I missed something? My dto class: ``` public class User { public enum Gender {MALE, FEMALE} ; public static class Name { private String _first, _last; public String getFirst() { return _first; } public String getLast() { return _last; } public void setFirst(String s) { _first = s; } public void setLast(String s) { _last = s; } } private Gender _gender; private Name _name; private boolean _isVerified; private byte[] _userImage; @JsonProperty(value ="NAAME",required = true) public Name getName() { return _name; } @JsonProperty("VERIFIED") public boolean isVerified() { return _isVerified; } @JsonProperty("GENDER") public Gender getGender() { return _gender; } @JsonProperty("IMG") public byte[] getUserImage() { return _userImage; } @JsonProperty(value ="NAAME",required = true) public void setName(Name n) { _name = n; } @JsonProperty("VERIFIED") public void setVerified(boolean b) { _isVerified = b; } @JsonProperty("GENDER") public void setGender(Gender g) { _gender = g; } @JsonProperty("IMG") public void setUserImage(byte[] b) { _userImage = b; } } ``` This is how do I deserialize the class: ``` public class Serializer { private ObjectMapper mapper; public Serializer() { mapper = new ObjectMapper(); SimpleModule sm = new SimpleModule("PIF deserialization"); mapper.registerModule(sm); } public void writeUser(File filename, User user) throws IOException { mapper.writeValue(filename, user); } public User readUser(File filename) throws IOException { return mapper.readValue(filename, User.class); } } ``` This is how it is actually called: ``` Serializer serializer = new Serializer(); User result = serializer.readUser(new File("user.json")); ``` Actuall json looks like: ``` {"GENDER":"FEMALE","VERIFIED":true,"IMG":"AQ8="} ``` I would expect that since _name is not specified in json file and is required that the exception will be thrown.