从日期到java日期
我正在使用RESTAPI,我有这个问题从日期到java日期,java,json,rest,spring-mvc,gson,Java,Json,Rest,Spring Mvc,Gson,我正在使用RESTAPI,我有这个问题 java.lang.IndexOutOfBoundsException: Invalid time zone indicator '0' 基本上,我使用Gson将Json转换为我的类 Gson gson = new Gson(); MyResponse myResponse = gson.fromJson(responseService.getNumber(id), MyResponse.class); 但我的json中有这样一个日期 "da
java.lang.IndexOutOfBoundsException: Invalid time zone indicator '0'
基本上,我使用Gson将Json转换为我的类
Gson gson = new Gson();
MyResponse myResponse = gson.fromJson(responseService.getNumber(id), MyResponse.class);
但我的json中有这样一个日期
"date": 1375412400000
如何转换到date中的模型类?例如,转换并显示2018年2月25日
MyResponse.class
public class MyResponse {
List<Dados> dados;
public List<Dados> getDados() {
return dados;
}
public void setDados(List<Dados> dados) {
this.dados = dados;
}
}
护墙板。班级
public class Dados {
@JsonFormat(shape = JsonFormat.Shape.STRING,pattern="dd/MM/yyyy",locale = "pt-BR", timezone = "Brazil/East")
@DateTimeFormat(pattern = "dd/MM/yyyy")
@Temporal(TemporalType.DATE)
Date data;
String codigo;
String estado;
String cidade;
String oriundo;
...gets and setters
}
我找到了解决办法。
首先我得确定日期
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("M/d/yy hh:mm a");
在我必须创建一个类来反序列化日期之后
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
public class DateDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement element, Type arg1,
JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
SimpleDateFormat formatter = new SimpleDateFormat("M/d/yy hh:mm a");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
return formatter.parse(date);
} catch (ParseException e) {
System.err.println("Failed to parse Date due to:", e);
return null;
}
}
}
完整代码在哪里?您正在使用不存在的变量。responseService.getNumber(id)只是映射url以获取rest服务。我的日期类是@JsonFormat(shape=JsonFormat.shape.STRING,pattern=“dd/MM/yyyy”,locale=“pt BR”,timezone=“巴西/东部”)@DateTimeFormat(pattern=“dd/MM/yyyy”)@Temporal(TemporalType.date)日期;请提供有效的MCVE。。。如果您提供了更多信息,请编辑您的问题…更新的类
@JsonFormat
不属于Gson。看起来你把杰克逊和格森混在一起了。
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
public class DateDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement element, Type arg1,
JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
SimpleDateFormat formatter = new SimpleDateFormat("M/d/yy hh:mm a");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
return formatter.parse(date);
} catch (ParseException e) {
System.err.println("Failed to parse Date due to:", e);
return null;
}
}
}
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());