1 package com.fasterxml.jackson.datatype.jsr310.deser.key;
2
3 import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
4 import static java.time.temporal.ChronoField.YEAR;
5
6 import java.io.IOException;
7 import java.time.DateTimeException;
8 import java.time.YearMonth;
9 import java.time.format.DateTimeFormatter;
10 import java.time.format.DateTimeFormatterBuilder;
11 import java.time.format.SignStyle;
12
13 import com.fasterxml.jackson.databind.DeserializationContext;
14
15
18 public class YearMonthKeyDeserializer extends Jsr310KeyDeserializer {
19 public static final YearMonthKeyDeserializer INSTANCE = new YearMonthKeyDeserializer();
20
21
22 private static final DateTimeFormatter FORMATTER = new DateTimeFormatterBuilder()
23 .appendValue(YEAR, 4, 10, SignStyle.EXCEEDS_PAD)
24 .appendLiteral('-')
25 .appendValue(MONTH_OF_YEAR, 2)
26 .toFormatter();
27
28 protected YearMonthKeyDeserializer() { }
29
30 @Override
31 protected YearMonth deserialize(String key, DeserializationContext ctxt) throws IOException {
32 try {
33 return YearMonth.parse(key, FORMATTER);
34 } catch (DateTimeException e) {
35 return _handleDateTimeException(ctxt, YearMonth.class, e, key);
36 }
37 }
38 }
39