Разобрать JSON Date от POST с Дженсоном и Джерси

Краткое вступление (можно пропустить):Привет, есть много вопросов и ответов по этой теме, но иногда решение настолько простое, что вы даже не задумываетесь, и потому что я потерял много времени, я хочу разместить дополнение ко всем ответам.

Проблема: у вас есть служба JSON REST, которая обрабатывает запросы POST для сохранения объекта JSON, но этот объект содержит поле Date, которое Genson не анализирует "из коробки".

Объект Java:

public class MyObj {

    // The field you want to serialize/deserialize
    private Date date;

    // Constructor with no arguments needed by Genson
    public MyObj() {}
}

ОТДЫХА с Джерси:

@Path("/api/my-obj")
public class MyObjAPI {

    @POST
    @Consumes("application/json")
    public Response insert(MyObj myObj) {
        // do what you want with myObj, it's ready to use with the date
        return Response.created('url/to/created/object').build();
    }
}

Клиент в javascript с jQuery:

// This is the JSON Object to POST
var myObj = {
    date: new Date()
};

$.ajax({
    method: 'POST',
    url: '/api/my-obj',
    data: JSON.stringify(myObj),
    dataType: 'json',
    processData: false,
    contentType: 'application/json'
});

1 ответ

Решение

РЕШЕНИЕ:

Genson предоставляет простой способ определить, как даты (де) сериализуются, это решение вы можете найти везде:

@Provider
public class GensonProvider implements ContextResolver<Genson> {

    private final Genson genson = new GensonBuilder()
            .useDateAsTimestamp(false)
            .useDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
            .create();

    @Override
    public Genson getContext(Class<?> type) {
        return genson;
    }
}

ВАЖНЫЙ:

Если решение выше не работает, убедитесь, что тип Date поля в вашем Java-объекте тот, который импортирован с:

import java.util.Date;

и не:

import java.sql.Date;

Я понял это сам, но нигде не нашел его в Stackru, это глупая ошибка, настолько простая, что вы не можете думать (как я), я надеюсь, что это кому-нибудь поможет.

Другие вопросы по тегам