我正在使用jackson-databind-2.9.8.jar
。
这是模型的Java
类表示形式,它将包含反序列化的JSON
String
。
@JsonIgnoreProperties(ignoreUnknown = true)
public class CustomClass {
@JsonProperty("key-one")
private String keyOne;
@JsonProperty("key-two")
private String keyTwo;
@JsonProperty("key-three")
private String keyThree;
@JsonCreator
public CustomClass(
@JsonProperty("key-one") String keyOne,
@JsonProperty("key-two") String keyTwo,
@JsonProperty("key-three") String keyThree) {
this.keyOne = keyOne;
this.keyTwo = keyTwo;
this.keyThree = keyThree;
}
}
下面的代码然后解析json
,其中包含JSON
中的String
结构。
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, true);
CustomClass customClass;
try {
customClass = mapper.readValue(json, CustomClass.class);
} catch (IOException e) {
System.out.println("Parse error");
e.printStacktrace();
}
问题在于,如果有任何属性:
key-one
key-two
key-three
,将抛出json
。
我只想在缺少Exception
或Exception
的情况下抛出key-one
,而让key-two
是可选的。
我该如何实现?
答案 0 :(得分:0)
使用Dhruv Kapatel注释,您应该使用默认(无arg)构造函数,并且所需的@JsonProperty应该具有required = true
。
答案 1 :(得分:0)
这是我定义类的方式,以指定哪些字段是必需的,哪些字段不是必需的:
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyClass {
@JsonProperty("value-one")
private String valueOne;
@JsonProperty("value-two")
private String valueTwo;
@JsonProperty("value-three")
private String valueThree;
public MyClass(
@JsonProperty(value = "value-one", required = true) String valueOne,
@JsonProperty(value = "value-two", required = true) String valueTwo,
@JsonProperty(value = "value-three", required = false) String valueThree) {
..
}
}