如何检测JSON有效内容中的null并抛出无法设置null的错误?
示例:
public class Foo {
@JsonDeserialize(using = XMLGregorianCalendarDeserializer.class)
private XMLGregorianCalendar messageDate;
public XMLGregorianCalendar getMessageDate() {
return messageDate;
}
public void setMessageDate(XMLGregorianCalendar messageDate) {
this.messageDate = messageDate;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
XMLGregorian日历的反序列化器类:
class XMLGregorianCalendarDeserializer extends
GregorianCalendarDeserializer {
private static final long serialVersionUID = 7195196182149599616L;
@Override
public XMLGregorianCalendar deserialize(JsonParser jp,
DeserializationContext ctxt) throws IOException {
System.out.println("Deserializer called");
try {
if (jp.getText() != null && jp.getText().trim().length() == 0) {
throw new JsonParseException(
"The string:'"
+ jp.getText()
+ "' is not a valid XML Gregorian format date/time.",
jp.getCurrentLocation());
}
return super.deserialize(jp, ctxt);
} catch (JsonProcessingException e) {
throw new JsonParseException("The string:'" + jp.getText()
+ "' is not a valid XML Gregorian format date/time.",
jp.getCurrentLocation());
}
}
@Override
public XMLGregorianCalendar getNullValue() {
System.out.println("Get null value called >>>>>>>>>>>>>> ");
return Utility.getXMLGregorianCal();
}
}
我有以下字符串(JSON有效负载),我想验证messageDate何时为空。
String payload = "{\"messageDate\":null,\"name\":\"someName\"}";
ObjectMapper mapper = new ObjectMapper();
Foo f1 = mapper.readValue(payload, Foo.class);
System.out.println("Foo is " + f1.getMessageDate() + f1.getName());
当messageDate为null时,我注意到自定义序列化程序类中的getNullValue()被调用。现在我发送一个XMLGregorianCalendar实例,当它为null时。
以下内容已打印
Get null value called >>>>>>>>>>>>>>
Foo is 2013-12-09T17:26:00.642-08:00someName
我想抛出错误而不是返回非空值。
我还观察到在调用getNonValue()之后,不会调用deserialize(...)方法。
看起来当它看到null时,它调用getNullValue()并且使用方法中返回的任何值。
如果它不为null,则使用有效负载中的实际值,并调用deserialize(...)方法。
而不是这种行为,我想在有效负载中为null时抛出错误。
我该怎么做?