2

Jackson を使用して JSON を処理しています。日付を希望どおりにフォーマットするためのカスタム日付シリアライザーがありますが、 @JsonSerialize(include = Inclusion.NON_NULL) 注釈を順守しません。シリアライザーは以下です。

日付が null の場合でも、書き込まれます。カスタムシリアライザーを使用しない場合、すべて問題なく、null 値は書き込まれません。私の質問は、JsonSerializer クラスに、null 値の書き込みを停止するために行う必要があるものはありますか?

public class DateSerializer extends JsonSerializer<Date>
{
    @Override
    public final void serialize(Date date, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException
    {
        SimpleDateFormat sdf = new SimpleDateFormat(MY_FORMAT);
        jgen.writeString(sdf.format(date));
    }
}
4

3 に答える 3

-1

カスタム日付形式のシリアライザー/デシリアライザーを作成できます。

デシリアライザーの場合:

public class JsonDateDeserializer extends JsonDeserializer<Date> {

    private static final SimpleDateFormat dateFormat;

    static {
        dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'");
        dateFormat.setTimeZone(SimpleTimeZone.getTimeZone("UTC"));
    }

    @Override
    public Date deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException {
        String date = jsonparser.getText();
        if (date != null && !"".equals(date)) {
            try {
                return dateFormat.parse(date);
            } catch (ParseException e) {
                throw new JsonParseException(jsonparser, e.getMessage());
            }
        }
        return null;
    }

}

シリアライザーの場合:

public class JsonDateSerializer extends JsonSerializer<Date> {

    private static final SimpleDateFormat dateFormat;

    static {
        dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'");
        dateFormat.setTimeZone(SimpleTimeZone.getTimeZone("UTC"));
    }

    @Override
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider) throws IOException {
        String formattedDate = dateFormat.format(date);
        gen.writeString(formattedDate);
    }
}

そしてあなたのPOJOで:

@Data
public class Person implements Serializable {

    private static final long serialVersionUID = -8041031461422721556L;

    private Long id;

    private String name;

    @JsonSerialize(using = JsonDateSerializer.class)
    @JsonDeserialize(using = JsonDateDeserializer.class)
    private Date dob;

}
于 2017-10-10T17:13:44.937 に答える