1
16
17 package com.fasterxml.jackson.datatype.jsr310.ser;
18
19 import com.fasterxml.jackson.annotation.JsonFormat;
20
21 import com.fasterxml.jackson.core.JsonGenerator;
22 import com.fasterxml.jackson.core.JsonParser;
23 import com.fasterxml.jackson.core.JsonToken;
24
25 import com.fasterxml.jackson.databind.JavaType;
26 import com.fasterxml.jackson.databind.JsonMappingException;
27 import com.fasterxml.jackson.databind.SerializerProvider;
28 import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
29 import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonIntegerFormatVisitor;
30
31 import java.io.IOException;
32 import java.time.Year;
33 import java.time.format.DateTimeFormatter;
34
35
41 public class YearSerializer extends JSR310FormattedSerializerBase<Year>
42 {
43 private static final long serialVersionUID = 1L;
44
45 public static final YearSerializer INSTANCE = new YearSerializer();
46
47 protected YearSerializer() {
48 this(null);
49 }
50
51 public YearSerializer(DateTimeFormatter formatter) {
52 super(Year.class, formatter);
53 }
54
55 protected YearSerializer(YearSerializer base, Boolean useTimestamp, DateTimeFormatter formatter) {
56 super(base, useTimestamp, formatter, null);
57 }
58
59 @Override
60 protected YearSerializer withFormat(Boolean useTimestamp, DateTimeFormatter formatter, JsonFormat.Shape shape) {
61 return new YearSerializer(this, useTimestamp, formatter);
62 }
63
64 @Override
65 public void serialize(Year year, JsonGenerator generator, SerializerProvider provider) throws IOException
66 {
67 if (useTimestamp(provider)) {
68 generator.writeNumber(year.getValue());
69 } else {
70 String str = (_formatter == null) ? year.toString() : year.format(_formatter);
71 generator.writeString(str);
72 }
73 }
74
75
76 @Override
77 protected void _acceptTimestampVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
78 throws JsonMappingException
79 {
80 JsonIntegerFormatVisitor v2 = visitor.expectIntegerFormat(typeHint);
81 if (v2 != null) {
82 v2.numberType(JsonParser.NumberType.LONG);
83 }
84 }
85
86 @Override
87 protected JsonToken serializationShape(SerializerProvider provider) {
88 return useTimestamp(provider) ? JsonToken.VALUE_NUMBER_INT : JsonToken.VALUE_STRING;
89 }
90 }
91