Android REST POST pierde valor de fecha

Tengo una aplicación para Android (Spring Android + Android Annotations + Gson) que consume servicios REST desde una aplicación Web (Jersey + Spring + Hibernate / JPA). El problema es que mis propiedades java.util.Date no están serializadas:

Actividad (aplicación de Android):

... @Click(R.id.buttonLogin) void onLoginClick() { Student student = new Student(); student.setDateRegistration(new Date()); //Property where the problem occurs student.setFirstName("Venilton"); student.setGender(Gender.M); doSomethingInBackground(student); } @Background void doSomethingInBackground(Student student) { this.restClient.insert(student); } ... 

Rest Client (aplicación de Android):

 @Rest(rootUrl = "http://MY_IP:8080/restful-app", converters = { GsonHttpMessageConverter.class }) public interface StudentRESTfulClient { @Post("/student/insert") Student insert(Student student); } 

Servidor de descanso (aplicación Web):

 @Component @Path("/student") public class StudentRESTfulServer { @Autowired private StudentService studentServiceJpa; @POST @Path("/insert") public Student insert(Student student) { //student.getDateRegistration() is null! It's a problem! Student studentResponse = null; try { this.studentServiceJpa.insert(student); studentResponse = student; } catch (Exception exception) { } return studentResponse; } } 

La aplicación de Android realiza el POST el objeto de estudiante para el servicio REST, pero la propiedad DateRegistration pierde su valor cuando el objeto de estudiante llega en StudentRESTfulServer.

¿Usted me podría ayudar?

Al parecer Gson no sabe cómo serializar correctamente su fecha (un poco raro que no arrojar nada en el registro, o no?)

La solución simple sería establecer el formato de fecha de Gson que va a utilizar. Para esto usted necesita crear el convertidor de encargo y utilizarlo en vez de GsonHttpMessageConverter

CustomHttpMessageConverter.java

 CustomHttpMessageConverter extends GsonHttpMessageConverter { protected static final String DATE_FORMAT = "yyyy-MM-dd"; protected static Gson buildGson() { GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setDateFormat(DATE_FORMAT); return gsonBuilder.create(); } public CustomHttpMessageConverter() { super(buildGson()); } } 

A continuación, en su cliente REST (aplicación para Android)

 @Rest(rootUrl = "http://MY_IP:8080/restful-app", converters = { CustomHttpMessageConverter.class }) 

Y eso debería funcionar bien.

Si aún no funciona

A continuación, puede agregar la configuración que necesita para Gson dentro del método buildGson , por ejemplo, puede registrar serializadores personalizados si necesita:

  gsonBuilder.registerTypeAdapter(Date.class, new GsonDateDeSerializer()); 

Pero entonces necesitará implementar las interfaces JsonDeserializer y JsonSerializer dentro de su clase GsonDateDeSerializer .

Para la serialización / deserialización personalizada puede comprobar mi otra respuesta: GSON Serialize boolean to 0 or 1

  • Android: error al cargar la biblioteca
  • (A) Smack devuelve el error "service-unavailable (503)" en login ()
  • Signo de dólar ($) después del nombre de clase de actividad en registros de Android (clase interna no anónima)
  • Obtención de información desde el teclado en pantalla mediante libgdx
  • Android: Programe el modo de selección de texto en un WebView en Jelly Bean
  • Detección de elipse con OpenCV
  • Samsung Galaxy S8 modo de pantalla completa
  • Crash en Android 2.3.3 después de actualizar a la biblioteca de soporte 25.0.0 (java.lang.NoSuchMethodError: android.view.View.isAttachedToWindow)
  • ¿Cómo aceptar cadenas aproximadamente correctas como correctas, al comparar?
  • Android - Definir el fondo de la aplicación
  • Función de paso como parámetro en java
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.