gpt4 book ai didi

java - 为什么我无法将 JSON (GSON) 日期格式从改造请求正文转换为 java 对象?

转载 作者:行者123 更新时间:2023-12-01 18:42:46 24 4
gpt4 key购买 nike

我正在从 Android(Retrofit)向服务器发送请求正文(由 JAVA/JERSEY/JACKSON 支持)。我正在通过拦截器记录请求正文,它看起来像什么

{"workId":"456655","workName":"some work","workOrderDate":"Jan 29, 2020 12:00:00 AM"}

在服务器端,我的Project对象能够解析除“workOrderDate”之外的每个字段。我尝试使用

更改各种类型的 Gson 日期格式

Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd")
.create();

但仍采用 JSON,格式未更改(2020 年 1 月 29 日 12:00:00 AM),并且未分配给 Project 对象的 "workOrderDate" 字段在服务器端。

Servier 端的对象-

public class Project implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "project_id")
private Integer projectId;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 200)
@Column(name = "work_name")
private String workName;
@Basic(optional = false)
@NotNull
@Lob
@Size(min = 1, max = 2147483647)
@Column(name = "work_description")
private String workDescription;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "consignee_work_order")
private String consigneeWorkOrder;
@Basic(optional = false)
@NotNull
@Column(name = "work_order_date")
@Temporal(TemporalType.DATE)
private Date workOrderDate;
@Size(max = 45)
@Column(name = "consignee")
private String consignee;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "sent_by")
private String sentBy;
@Size(max = 45)
@Column(name = "chargeable_head")
private String chargeableHead;
@Size(max = 45)
@Column(name = "account_unit")
private String accountUnit;
@Size(max = 45)
@Column(name = "fund_exist")
private String fundExist;
@Size(max = 45)
@Column(name = "fund_certificate")
private String fundCertificate;
// @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
@Column(name = "approx_cost")
private Double approxCost;
@Column(name = "approx_weight")
private Double approxWeight;
@Size(max = 200)
@Column(name = "drawing")
private String drawing;
@Size(max = 45)
@Column(name = "required_at")
private String requiredAt;
@Lob
@Size(max = 2147483647)
@Column(name = "remark1")
private String remark1;
@Lob
@Size(max = 2147483647)
@Column(name = "remark2")
private String remark2;
@Lob
@Size(max = 2147483647)
@Column(name = "remark3")
private String remark3;
@JoinColumn(name = "division", referencedColumnName = "division_id")
@ManyToOne(optional = false)
private Division division;

public Project() {
}

public Project(Integer projectId) {
this.projectId = projectId;
}

public Project(Integer projectId, String workName, String workDescription, String consigneeWorkOrder, Date workOrderDate, String sentBy) {
this.projectId = projectId;
this.workName = workName;
this.workDescription = workDescription;
this.consigneeWorkOrder = consigneeWorkOrder;
this.workOrderDate = workOrderDate;
this.sentBy = sentBy;
}

public Integer getProjectId() {
return projectId;
}

public void setProjectId(Integer projectId) {
this.projectId = projectId;
}

public String getWorkName() {
return workName;
}

public void setWorkName(String workName) {
this.workName = workName;
}

public String getWorkDescription() {
return workDescription;
}

public void setWorkDescription(String workDescription) {
this.workDescription = workDescription;
}

public String getConsigneeWorkOrder() {
return consigneeWorkOrder;
}

public void setConsigneeWorkOrder(String consigneeWorkOrder) {
this.consigneeWorkOrder = consigneeWorkOrder;
}

public Date getWorkOrderDate() {
return workOrderDate;
}

public void setWorkOrderDate(Date workOrderDate) {
this.workOrderDate = workOrderDate;
}

public String getConsignee() {
return consignee;
}

public void setConsignee(String consignee) {
this.consignee = consignee;
}

public String getSentBy() {
return sentBy;
}

public void setSentBy(String sentBy) {
this.sentBy = sentBy;
}

public String getChargeableHead() {
return chargeableHead;
}

public void setChargeableHead(String chargeableHead) {
this.chargeableHead = chargeableHead;
}

public String getAccountUnit() {
return accountUnit;
}

public void setAccountUnit(String accountUnit) {
this.accountUnit = accountUnit;
}

public String getFundExist() {
return fundExist;
}

public void setFundExist(String fundExist) {
this.fundExist = fundExist;
}

public String getFundCertificate() {
return fundCertificate;
}

public void setFundCertificate(String fundCertificate) {
this.fundCertificate = fundCertificate;
}

public Double getApproxCost() {
return approxCost;
}

public void setApproxCost(Double approxCost) {
this.approxCost = approxCost;
}

public Double getApproxWeight() {
return approxWeight;
}

public void setApproxWeight(Double approxWeight) {
this.approxWeight = approxWeight;
}

public String getDrawing() {
return drawing;
}

public void setDrawing(String drawing) {
this.drawing = drawing;
}

public String getRequiredAt() {
return requiredAt;
}

public void setRequiredAt(String requiredAt) {
this.requiredAt = requiredAt;
}

public String getRemark1() {
return remark1;
}

public void setRemark1(String remark1) {
this.remark1 = remark1;
}

public String getRemark2() {
return remark2;
}

public void setRemark2(String remark2) {
this.remark2 = remark2;
}

public String getRemark3() {
return remark3;
}

public void setRemark3(String remark3) {
this.remark3 = remark3;
}

public Division getDivision() {
return division;
}

public void setDivision(Division division) {
this.division = division;
}

@Override
public int hashCode() {
int hash = 0;
hash += (projectId != null ? projectId.hashCode() : 0);
return hash;
}

@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Project)) {
return false;
}
Project other = (Project) object;
if ((this.projectId == null && other.projectId != null) || (this.projectId != null && !this.projectId.equals(other.projectId))) {
return false;
}
return true;
}

@Override
public String toString() {
return "com.nrbwlko.officeprojectmaven1.Project[ projectId=" + projectId + " ]";
}

}

Android端

public class PojoProject {
private Integer projectId;
private String workName;
private String workDescription;
private String consigneeWorkOrder;
private Date workOrderDate;
private String consignee;
private String sentBy;
private String chargeableHead;
private String accountUnit;
private String fundExist;
private String fundCertificate;
private Double approxCost;
private Double approxWeight;
private String drawing;
private String requiredAt;
private String remark1;
private String remark2;
private String remark3;
private PojoDivision division;

public PojoProject(String workName, String workDescription, String consigneeWorkOrder, Date workOrderDate, String consignee, String sentBy, String chargeableHead, String accountUnit, PojoDivision division) {
this.workName = workName;
this.workDescription = workDescription;
this.consigneeWorkOrder = consigneeWorkOrder;
this.workOrderDate = workOrderDate;
this.consignee = consignee;
this.sentBy = sentBy;
this.chargeableHead = chargeableHead;
this.accountUnit = accountUnit;
this.division = division;
}

public Integer getProjectId() {
return projectId;
}

public void setProjectId(Integer projectId) {
this.projectId = projectId;
}

public String getWorkName() {
return workName;
}

public void setWorkName(String workName) {
this.workName = workName;
}

public String getWorkDescription() {
return workDescription;
}

public void setWorkDescription(String workDescription) {
this.workDescription = workDescription;
}

public String getConsigneeWorkOrder() {
return consigneeWorkOrder;
}

public void setConsigneeWorkOrder(String consigneeWorkOrder) {
this.consigneeWorkOrder = consigneeWorkOrder;
}

public Date getWorkOrderDate() {
return workOrderDate;
}

public void setWorkOrderDate(Date workOrderDate) {
this.workOrderDate = workOrderDate;
}

public String getConsignee() {
return consignee;
}

public void setConsignee(String consignee) {
this.consignee = consignee;
}

public String getSentBy() {
return sentBy;
}

public void setSentBy(String sentBy) {
this.sentBy = sentBy;
}

public String getChargeableHead() {
return chargeableHead;
}

public void setChargeableHead(String chargeableHead) {
this.chargeableHead = chargeableHead;
}

public String getAccountUnit() {
return accountUnit;
}

public void setAccountUnit(String accountUnit) {
this.accountUnit = accountUnit;
}

public String getFundExist() {
return fundExist;
}

public void setFundExist(String fundExist) {
this.fundExist = fundExist;
}

public String getFundCertificate() {
return fundCertificate;
}

public void setFundCertificate(String fundCertificate) {
this.fundCertificate = fundCertificate;
}

public Double getApproxCost() {
return approxCost;
}

public void setApproxCost(Double approxCost) {
this.approxCost = approxCost;
}

public Double getApproxWeight() {
return approxWeight;
}

public void setApproxWeight(Double approxWeight) {
this.approxWeight = approxWeight;
}

public String getDrawing() {
return drawing;
}

public void setDrawing(String drawing) {
this.drawing = drawing;
}

public String getRequiredAt() {
return requiredAt;
}

public void setRequiredAt(String requiredAt) {
this.requiredAt = requiredAt;
}

public String getRemark1() {
return remark1;
}

public void setRemark1(String remark1) {
this.remark1 = remark1;
}

public String getRemark2() {
return remark2;
}

public void setRemark2(String remark2) {
this.remark2 = remark2;
}

public String getRemark3() {
return remark3;
}

public void setRemark3(String remark3) {
this.remark3 = remark3;
}

public PojoDivision getDivision() {
return division;
}

public void setDivision(PojoDivision division) {
this.division = division;
}

}

从 ViewModel 触发对服务器端的调用的方法 -

public void save() {
System.out.println(workDate.getValue());
Date workorderDate = getWorkDateFromString(workDate.getValue());

PojoProject project = new PojoProject(workName.getValue(), workDescription.getValue(), workOrder.getValue(), workorderDate, consignee.getValue(), sentBy.getValue(), chargeableHead.getValue(), accountUnit.getValue(), selectedDivision.getValue());


projectRepository.saveProject(project);

}

这是我的服务器端休息端点,我将 JSON 收集到 Project() 对象中并保存到数据库 --

@POST
@AnnotationSecured
@Path("saveProject")
@Consumes(MediaType.APPLICATION_JSON)
// @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public void saveNewProject(Project newProject) {
System.out.println("inside save new project");
if (newProject.getWorkOrderDate() == null) {
System.out.println("date is null");
} else {
System.out.println("date is " + newProject.getWorkOrderDate().toString());
}
Project project = null;
EntityManager em = UtilityJPA.getEntityManager();
EntityTransaction transaction = em.getTransaction();
try {
transaction.begin();
em.persist(newProject);
transaction.commit();
} catch (Exception ex) {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}

} finally {
em.clear();
}

}

}

最佳答案

您应该尝试使用DateFormat.FULL。像这样对我来说效果很好

Gson gson = new GsonBuilder().setDateFormat(DateFormat.FULL).create();

关于java - 为什么我无法将 JSON (GSON) 日期格式从改造请求正文转换为 java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59890152/

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