Я заменяю ISO8601Utils
, который прокомментирован ниже из-за того, что SonarQube выдает следующую ошибку: Remove this use of "ISO8601Utils"; it is deprecated.
Чтобы заменить его, я бы использовал внешний генератор генератора схемы json, https://github.com/FasterXML/jackson-module-jsonSchema или что-то еще.Я прочитал ссылку, но не понимаю, как использовать объектный сопоставитель для поворота, чтобы заменить эту строку: String value = ISO8601Utils.format(date, true);
public static class ISO8601DateFormat extends DateFormat {
public ISO8601DateFormat() {}
public StringBuffer format(Date date, StringBuffer toAppendTo,
FieldPosition fieldPosition) {
String value = ISO8601Utils.format(date, true);
//Im not sure how I can replace this line with a new
//replacement
toAppendTo.append(value);
return toAppendTo;
}
public Date parse(String source, ParsePosition pos) {
pos.setIndex(source.length());
return ISODateTimeFormat.dateTimeParser().parseDateTime(source).toDate();
}
public Object clone() {
return this;
}
public String toString() {
return this.getClass().getName();
}
}
Любая помощь будет принята с благодарностью!
PS IЯ пишу модульный тест, чтобы убедиться, что ISO8601Utils и SimpleDateFormat имеют одинаковый формат.
Мой обновленный класс:
public static class ISO8601DateFormat extends DateFormat {
public static final long serialVersionUID = 3549786448500970210L;
public ISO8601DateFormat() {}
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo,
FieldPosition fieldPosition) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String value = dateFormat.format(date);
toAppendTo.append(value);
return toAppendTo;
}
public Date parse(String source, ParsePosition pos) {
pos.setIndex(source.length());
return ISODateTimeFormat.dateTimeParser().parseDateTime(source).toDate();
}
public Object clone() {
return this;
}
public String toString() {
return this.getClass().getName();
}
}
Мой метод тестирования:
@Test
public void testDateFormat() {
df = new DefaultHttpClientUtil.ISO8601DateFormat();
Date date = new Date();
//df.setTimeZone(TimeZone.getTimeZone("GMT")); I'm getting NPE
for this line
assertThat(df.format(date)).isEqualTo(ISO8601Utils.format(date,
true));
}
Тем не менее, я получаю исключение нулевого указателя для закомментированной строки.Я предполагаю, что это связано с инъекцией или издевательством над объектом, но я не уверен, как мне решить эту проблему.