gpt4 book ai didi

java - Android REST POST 丢失日期值

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:56:15 26 4
gpt4 key购买 nike

我有一个 Android 应用程序(Spring Android + Android Annotations + Gson),它使用来自 Web 应用程序(Jersey + Spring + Hibernate/JPA)的 REST 服务。问题是我的 java.util.Date 属性没有序列化:

Activity (安卓应用):

...
@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(rootUrl = "http://MY_IP:8080/restful-app", 
converters = { GsonHttpMessageConverter.class })
public interface StudentRESTfulClient {

@Post("/student/insert")
Student insert(Student student);
}

休息服务器(网络应用程序):

@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;
}
}

Android 应用程序为 REST 服务执行 POST 学生对象,但当学生对象到达 StudentRESTfulServer 时,DateRegistration 属性失去其值。

你能帮帮我吗?

最佳答案

显然 Gson 不知道如何正确地序列化你的日期(有点奇怪,它没有将任何东西扔进日志,或者是吗?)

简单的解决方案是设置您将要使用的 Gson 日期格式。为此,您需要创建自定义转换器并使用它代替 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());
}
}

然后在您的REST 客户端(Android 应用程序)

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

这应该可以正常工作。

如果还是不行

然后您可以在 buildGson 方法中添加 Gson 所需的任何设置,例如如果需要,您可以注册自定义序列化程序:

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

但是您需要在 GsonDateDeSerializer 类中实现 JsonDeserializerJsonSerializer 接口(interface)。

对于自定义序列化/反序列化,您可以查看我的其他答案:GSON Serialize boolean to 0 or 1

关于java - Android REST POST 丢失日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20414275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com