![](/img/trans.png)
[英]Validating (required=true) set in JsonProperty while using ObjectMapper in Jackson should throw Exception
[英]Jackson @JsonProperty(required=true) doesn't throw an exception
我正在使用jackson 2.2注釋@JsonProperty,必需的設置為true。 通過ObjectMapper readValue()方法反序列化不包含該屬性的json文件時,不會拋出任何異常。 是應該以不同的方式工作還是我錯過了什么?
我的課程:
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;
}
}
這是我如何反序列化類:
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);
}
}
這就是實際調用的方式:
Serializer serializer = new Serializer();
User result = serializer.readUser(new File("user.json"));
Actuall json看起來像:
{"GENDER":"FEMALE","VERIFIED":true,"IMG":"AQ8="}
我希望由於_name未在json文件中指定,並且要求拋出異常。
根據Jackson注釋javadocs :“請注意,從2.0開始,BeanDeserializer不使用此屬性:預計將為稍后的次要版本添加支持。”
即:使用此設置不執行驗證。 它(僅)(當前)用於生成JSON模式或自定義代碼。
使用Jackson 2.6,您可以使用必需的,但您必須使用JsonCreator
例如:
public class MyClass {
@JsonCreator
public MyClass(@JsonProperty(value = "x", required = true) Integer x, @JsonProperty(value = "value_y", required = true) Integer y) {
this.x = x;
this.y = y;
}
private Integer x;
private Integer y;
}
如果x或y不存在,則在嘗試反序列化時將拋出異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.