gpt4 book ai didi

java - Jackson @JsonProperty(required=true) 不会抛出异常

转载 作者:IT老高 更新时间:2023-10-28 12:47:59 26 4
gpt4 key购买 nike

我正在使用 jackson 2.2 注释 @JsonProperty 并将 required 设置为 true。通过 ObjectMapper readValue() 方法反序列化不包含该属性的 json 文件时,不会引发异常。它应该以不同的方式工作还是我错过了什么?

我的 dto 类:

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"));

实际的 json 看起来像:

{"GENDER":"FEMALE","VERIFIED":true,"IMG":"AQ8="}

我希望因为 _name 没有在 json 文件中指定,并且需要抛出异常。

最佳答案

使用 Jackson 2.6,您可以使用 required,但是您必须使用 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 不存在,则在尝试反序列化时将引发异常。

关于java - Jackson @JsonProperty(required=true) 不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18320731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com