반응형
Jackson @JsonProperty(필수=true)가 예외를 발생시키지 않음
잭슨 2.2 주석 @JsonProperty 를 사용하고 있으며, 필수설정은 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="}
json 파일에 _name이 지정되어 있지 않기 때문에 예외가 발생할 것으로 예상됩니다.
Jackson 2.6에서는 필수 기능을 사용할 수 있지만 Json Creator를 사용해야 합니다.
예를 들어 다음과 같습니다.
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가 존재하지 않는 경우, 역직렬화 시도 시 예외가 느려집니다.
Jackson 주석 javadocs: "2.0 현재 이 속성은 BeanDeserializer에서 사용되지 않습니다. 이후 마이너 버전에 대한 지원이 추가될 것으로 예상됩니다."
즉, 이 설정을 사용하여 검증이 수행되지 않습니다.현재 JSON 스키마를 생성하거나 커스텀코드에 의해서만 사용됩니다.
언급URL : https://stackoverflow.com/questions/18320731/jackson-jsonpropertyrequired-true-doesnt-throw-an-exception
반응형
'programing' 카테고리의 다른 글
j쿼리 투고 JSON (0) | 2023.03.29 |
---|---|
Plone은 다른 CMS에 충분히 대응하고 있습니까? (0) | 2023.03.29 |
CORS를 유효하게 하는 것은 언제가 안전합니까? (0) | 2023.03.29 |
투영기 "by.css()" vs "$"()" "$" vs "$"(") "Bling Bling" (0) | 2023.03.29 |
Wordpress 플러그인 업로드 양식이 헤드리스 브라우저에서 활성화되지 않음 (0) | 2023.03.29 |