从 JSON 反序列化时,我可以限制可能的值吗?
Can I restrict the possible values when deserializing from JSON?
我正在使用 fasterxml 库,我有以下内容:
public class Test {
public String value;
}
...
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static final ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
String json = "{\"value\":\"foo\"}";
Test t = mapper.readValue(json, Test.class);
}
}
是否可以限制可能的值value
可以?
例如,如果 JSON 是“{"value":"bar"}”,我希望 Test t = mapper.readValue(json, Test.class);
抛出异常(或以某种方式指示错误) .
直接通过 FasterXML (Jackson 2),没有。它将做的唯一验证是从 JSON 类型到相应的 Java 类型的可能转换。
您可以在用于相应字段的 setter 中自己进行验证,抛出运行时异常。例如
@JsonProperty("value")
public String setValue(String value) {
if ("bar".equals(value)) {
throw new RuntimeException("value " + value + " is inappropriate.");
}
this.value = value;
}
您还可以编写一个自定义 JsonDeserializer
来执行验证并在不适当的值上失败。有一个编写反序列化器的示例 here 和其他教程。
我正在使用 fasterxml 库,我有以下内容:
public class Test {
public String value;
}
...
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static final ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
String json = "{\"value\":\"foo\"}";
Test t = mapper.readValue(json, Test.class);
}
}
是否可以限制可能的值value
可以?
例如,如果 JSON 是“{"value":"bar"}”,我希望 Test t = mapper.readValue(json, Test.class);
抛出异常(或以某种方式指示错误) .
直接通过 FasterXML (Jackson 2),没有。它将做的唯一验证是从 JSON 类型到相应的 Java 类型的可能转换。
您可以在用于相应字段的 setter 中自己进行验证,抛出运行时异常。例如
@JsonProperty("value")
public String setValue(String value) {
if ("bar".equals(value)) {
throw new RuntimeException("value " + value + " is inappropriate.");
}
this.value = value;
}
您还可以编写一个自定义 JsonDeserializer
来执行验证并在不适当的值上失败。有一个编写反序列化器的示例 here 和其他教程。