我有一个优惠券系统,其中java中的优惠券bean具有date.sql startDate和endDate。
在 Angular 中,优惠券模型的构造函数中有 startDate:Date 和 endDate:Date 。
当我在网站上显示它时,它显示为 2019 年 7 月 30 日(以我的本地语言),因此当我单击购买按钮时,我在控制台中收到错误消息:
无法反序列化 java.sql.Date
类型的值(来自字符串“ֳ—ֳֵ—ֲֳ—ֲ¥ 13, 1991”):不是有效的表示形式(错误:无法解析日期值 'ֳ— ֵ⁄ֳ—ֲֳ—ֲ¥ 13, 1991': 无法解析日期“ֳ—ֳֵ—ֲֳ—ֲ¥ 13, 1991”:与任何标准形式不兼容(“yyyy-MM-dd'T'HH” :mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
在[来源:(org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream);行:1,列:73](通过引用链:beans.Coupon[“startDate”])
我尝试用管道显示它- {{value |日期:'yyyy-MM-dd'}} 但这样一来,我什至无法再在网站上显示它了。
</tr>
<tr *ngFor="let c of coupons">
<td>{{c.startDate}}</td>
<td>{{c.endDate}}</td>
<td>{{c.amount}}</td>
coupon model:
public constructor(
public id?:number,public title?:string,public message?:string,public image?:string,public startDate?:Date,
public endDate?:Date,public amount?:number,public price?:number,public type?:Coupontypes){}
}
Java
private Date startDate, endDate;
我想我无法购买优惠券,因为它使用字符串值创建 JSON,而不是像服务器期望接收的那样 yyyy-MM-dd。
最佳答案
如果我理解正确的话,错误来自您的 Java 程序。您正在以不符合预期的格式发送日期值。更改在 html 中查看日期的方式不会更改实际值。如果您使用 Angular 6+,您可以执行以下操作将日期转换为所需的格式:
import { formatDate } from '@angular/common';
class MyService {
constructor(@Inject(LOCALE_ID) private locale: string) {}
transformDate(date) {
return formatDate(date, 'yyyy-MM-dd', this.locale);
}
}
关于java - Angular向java发送错误的日期格式并且无法在表中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57274730/