Почему они иногда несовместимы? значение типа java.sql.Date, полученное с сервера, а затем преобразованное с помощью gooJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему они иногда несовместимы? значение типа java.sql.Date, полученное с сервера, а затем преобразованное с помощью goo

Сообщение Anonymous »

проблема
введение
Почему даты иногда не совпадают? Значение типа java.sql.Date, полученное от сервера Postman, затем десериализуется с помощью com.google.gson.Gson (и перед созданием экземпляра Gson я регистрирую два адаптера - один для десериализации java.sql.Date, другой для десериализации java.sql.Time.). И строка json, отправленная с сервера.
Я пытаюсь отправить запрос от Postman в Tomcat v9.0 и десериализовал необработанные данные (вот json string) в объект DietDiary, который содержит два поля типа java.sql.Date и java.sql.Time, используя пакет com.google.gson.
Два ключа необработанных данных запроса в Postman.

Код: Выделить всё

    "createDate":"2022-05-05",
"createTime":"12:00:00",
Изображение

Но консоль в Eclipse печатает

Код: Выделить всё

Ready to deserialize.
dietDiary:DietDiary [diaryId=2, userId=2, createDate=2021-12-26, createTime=00:00:00, totalFat=2.52, totalCarbon=2.3, totalProtein=2.1, totalFiber=2.1, totalSugar=1.2, totalSodium=1.1, totalCalories=1.21]
Не знаю почему?
подробная информация
Вот подробная информация.
сервер
имя метод запроса

url

Код: Выделить всё

http://localhost:8080/HealthHelper/dietDiary/test

необработанные данные

Строка JSON.

Код: Выделить всё

{
"diaryId":2,
"userId":2,
"createDate":"2022-05-05",
"createTime":"12:00:00",
"totalFat":2.52,
"totalCarbon":2.3,
"totalProtein":2.1,
"totalFiber":2.1,
"totalSugar":1.2,
"totalSodium":1.1,
"totalCalories":1.21
}
Клиент v9.0 (версия 9)
Код
В /HealthHelper/src/main/java/controller/TestController.java< /код>

Код: Выделить всё

package controller;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.sql.Date;
import java.sql.Time;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;

import constant.SqlDatePattern;
import constant.SqlTimePattern;
import util.gson.GsonForSqlDateAndSqlTime;
import util.gson.deserializer.JsonDeserializerForSqTime;
import util.gson.deserializer.JsonDeserializerForSqlDate;
import vo.DietDiary;

@WebServlet("/dietDiary/test")
public class TestController extends HttpServlet {

private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
Gson gson = GsonForSqlDateAndSqlTime.gson;
DietDiary dietDiary = gson.fromJson(req.getReader(), DietDiary.class);

System.out.println("Ready to deserialize.");
System.out.println("dietDiary:"+dietDiary);
}
}
В /HealthHelper/src/main/java/vo/DietDiary.java
Класс, который удовлетворяет правилу JavaBean и не может быть загрязнено.

Код: Выделить всё

package vo;

import java.sql.Date;
import java.sql.Time;

public class DietDiary {
private int diaryId;
private int userId;
private Date createDate;
private Time createTime;
private Double totalFat;
private Double totalCarbon;
private Double totalProtein;
private Double totalFiber;
private Double totalSugar;
private Double totalSodium;
private Double totalCalories;

public int getDiaryId() {
return diaryId;
}
public void setDiaryId(int diaryId) {
this.diaryId = diaryId;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Time getCreateTime() {
return createTime;
}
public void setCreateTime(Time createTime) {
this.createTime = createTime;
}
public Double getTotalFat() {
return totalFat;
}
public void setTotalFat(Double totalFat) {
this.totalFat = totalFat;
}
public Double getTotalCarbon() {
return totalCarbon;
}
public void setTotalCarbon(Double totalCarbon) {
this.totalCarbon = totalCarbon;
}
public Double getTotalProtein() {
return totalProtein;
}
public void setTotalProtein(Double totalProtein) {
this.totalProtein = totalProtein;
}
public Double getTotalFiber() {
return totalFiber;
}
public void setTotalFiber(Double totalFiber) {
this.totalFiber = totalFiber;
}
public Double getTotalSugar() {
return totalSugar;
}
public void setTotalSugar(Double totalSugar) {
this.totalSugar = totalSugar;
}
public Double getTotalSodium() {
return totalSodium;
}
public void setTotalSodium(Double totalSodium) {
this.totalSodium = totalSodium;
}
public Double getTotalCalories() {
return totalCalories;
}
public void setTotalCalories(Double totalCalories) {
this.totalCalories = totalCalories;
}

public boolean equals(Object object) {
if(object instanceof DietDiary) {
return false;
}

DietDiary dietDiary = (DietDiary) object;

if(!(this.getDiaryId() == dietDiary.getDiaryId())) {
return false;
}

if(!(this.getUserId() == dietDiary.getUserId())) {
return false;
}

if(!(this.getCreateDate() == dietDiary.getCreateDate())) {
return false;
}

if(!(this.getCreateTime() == dietDiary.getCreateTime())) {
return false;
}

return true;
}

@Override
public String toString() {
return "DietDiary [diaryId=" + diaryId + ", userId=" + userId + ", createDate=" + createDate + ", createTime="
+ createTime + ", totalFat=" + totalFat + ", totalCarbon=" + totalCarbon + ", totalProtein="
+ totalProtein + ", totalFiber=" + totalFiber + ", totalSugar=" + totalSugar + ", totalSodium="
+ totalSodium + ", totalCalories="  + totalCalories + "]";
}

}
В /HealthHelper/src/main/java/util/gson/GsonForSqlDateAndSqlTime.java
Я помещаю экземпляр gson, адаптеры регистрируются для десериализованных java.sql.Date и java.sql.Time в общедоступном классе GsonForSqlDateAndSqlTime

Код: Выделить всё

package util.gson;

import java.sql.Date;
import java.sql.Time;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import util.gson.deserializer.JsonDeserializerForSqTime;
import util.gson.deserializer.JsonDeserializerForSqlDate;

public class GsonForSqlDateAndSqlTime {
public static Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, JsonDeserializerForSqlDate.dateDeserializer)
.registerTypeAdapter(Time.class, JsonDeserializerForSqTime.timeDeserializer)
.create();
}
В /HealthHelper/src/main/java/util/gson/deserializer/JsonDeserializerForSqlDate.java

Код: Выделить всё

package util.gson.deserializer;

import java.lang.reflect.Type;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

import constant.SqlDatePattern;

public class JsonDeserializerForSqlDate {
public static JsonDeserializer dateDeserializer = new JsonDeserializer() {
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat(SqlDatePattern.sqlDatePattern);
try {
return new Date(dateFormat.parse(json.getAsString()).getTime());
} catch (ParseException e) {
throw new JsonParseException(e);
}
}
};
}

В /HealthHelper/src/main/java/util/gson/deserializer/JsonDeserializerForSqTime.java

Код: Выделить всё

package util.gson.deserializer;

import java.lang.reflect.Type;
import java.sql.Time;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

import constant.SqlTimePattern;

public class JsonDeserializerForSqTime {
public static JsonDeserializer timeDeserializer = new JsonDeserializer() {
@Override
public Time deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
SimpleDateFormat timeFormat = new SimpleDateFormat(SqlTimePattern.sqlTimePattern);
try {
return new Time(timeFormat.parse(json.getAsString()).getTime());
} catch (ParseException e) {
throw new JsonParseException(e);
}
}
};
}
Что я пробовал?
Я прочитал эти документы.
  • API интерфейса JsonDeserializer в пакете com.google.gson


Подробнее здесь: https://stackoverflow.com/questions/791 ... ved-from-s
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»