У меня странная проблема с небольшим сервлетом, который использует Джерси и Гссона для сериализации/десериализации JSON. Я на самом деле скопировал базовый поставщик Gson, написанный для Джерси, как этот: http://eclipsesource.com/blogs/2012/11/02/integrating-gson-into-a-jax-rs-based-application/, и все, казалось, работало нормально, пока я не попытался десериализовать Date (в стандартном формате ISO 8601), который всегда отображается в моем POJO как null ,Джерси + Gson не десериализует java.util.Date
Моя первая попытка была зарегистрировать адаптер типа десериализатор перед возвращением экземпляра gsonBuilder, как это:
import java.util.Date;
...
gsonBuilder.registerTypeAdapter(Date.class,
new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type type,
JsonDeserializationContext arg2) throws JsonParseException {
try {
System.out.println(json);
return (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXX")).parse(json.getAsString());
} catch (ParseException e) {
return null;
}
}
});
Это не сработало, и ничего не печатается при отправке запроса POST. Я попытался использовать метод setDateFormat
в экземпляре gsonBuilder перед его возвратом, но это ничего не изменило.
Я думал, что были какие-то другие классы, реализующие MessageBodyWriter
и MessageBodyReader
перекрывая свою собственную реализацию, поэтому я попытался удалить свою собственную реализацию и Джерси жаловался, что он был не в состоянии десериализации JSON (так что нет других поставщиков, Я полагаю).
Я попытался установить точки останова в методе readFrom
в своем MessageBodyReader
, но запрос фактически десериализуется без приостановки выполнения.
Следует отметить, что мой класс содержит также разные поля, некоторые строки и одну дату: строка всегда десериализована правильно.
Я попытался отправить разные даты, начиная с 2016-06-23T00:00:00.000+0200
(который должен быть отформатирован с использованием строки формата даты, которую я использовал в приведенном выше коде), и добравшись до простого 2016-06-17
, удалив одну часть в то время, и она никогда не работала.
Я очистил свой проект maven, перекомпилировал его, и он не сработал.
Я думал, что Jetty не мог загрузить правильные классы, поэтому я развернул тот же код на сервере Tomcat 8, и результат был таким же.
Моя последняя попытка была написать еще одну параллельную MessageBodyReader
, но вместо того, чтобы сделать его общим для Object
типа, я сделал конкретный java.util.Date
десериализатор, и до сих пор метод readFrom
, кажется, не назовешь.
Я серьезно не знаю, что я мог бы попробовать сейчас, есть ли у вас какие-либо идеи?
Заранее спасибо.
Это все еще не работает, я попытался удалить «XX» в конце или добавить точку останова в ловушку исключения, и ничего не происходит –