package com.fasterxml.jackson.datatype.joda.deser;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;

import com.fasterxml.jackson.databind.DeserializationContext;

import com.fasterxml.jackson.datatype.joda.cfg.FormatConfig;
import com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat;

import org.joda.time.MonthDay;

A Jackson deserializer for Joda MonthDay objects.

Expects a string value compatible with MonthDay's parse operation.

/** * A Jackson deserializer for Joda MonthDay objects. * <p> * Expects a string value compatible with MonthDay's parse operation. */
public class MonthDayDeserializer extends JodaDateDeserializerBase<MonthDay> { private static final long serialVersionUID = 1L; public MonthDayDeserializer() { this(FormatConfig.DEFAULT_MONTH_DAY_FORMAT); } public MonthDayDeserializer(JacksonJodaDateFormat format) { super(MonthDay.class, format); } @Override public JodaDateDeserializerBase<?> withFormat(JacksonJodaDateFormat format) { return new MonthDayDeserializer(format); } @Override public MonthDay deserialize(final JsonParser p, final DeserializationContext ctxt) throws IOException { if (p.hasToken(JsonToken.VALUE_STRING)) { return _fromString(p, ctxt, p.getText()); } // 30-Sep-2020, tatu: New! "Scalar from Object" (mostly for XML) if (p.isExpectedStartObjectToken()) { return _fromString(p, ctxt, ctxt.extractScalarFromObject(p, this, handledType())); } return (MonthDay) ctxt.handleUnexpectedToken(handledType(), p.currentToken(), p, "expected JSON String"); } // @since 2.12 protected MonthDay _fromString(final JsonParser p, final DeserializationContext ctxt, String value) throws IOException { value = value.trim(); if (value.isEmpty()) { return _fromEmptyString(p, ctxt, value); } return MonthDay.parse(value, _format.createParser(ctxt)); } }