Jackson JSON检测到null并抛出错误

时间:2013-12-10 01:28:55

标签: java json null jackson

如何检测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时抛出错误。

我该怎么做?

0 个答案:

没有答案