JHipster实体默认设置日期后Angular前端不显示问题求助
我之前在JHipster项目里也踩过类似的坑,给你一步步拆解问题根源和解决方案:
1. 先解决最直观的问题:删掉@JsonIgnore注解
你给creationDate和changeDate加了@JsonIgnore,这相当于告诉Jackson序列化的时候直接把这两个字段从JSON里删掉,前端根本拿不到数据,自然显示为空!直接把这两个注解删掉,后端就能把日期值返回给前端了。
2. 修正Java字段的错误配置
你给日期字段加了@GeneratedValue(strategy = GenerationType.AUTO)——这个注解是用来生成主键ID的,完全不适合日期字段,必须删掉!另外,MySQL的date类型和Java的Instant(带时区的时间戳)匹配度不高,换成LocalDate更合适,代码改成这样:
@Column(name = "creation_date", nullable = false, updatable = false) private LocalDate creationDate = LocalDate.now(); @Column(name = "change_date", nullable = false) private LocalDate changeDate = LocalDate.now();
3. 用JHipster自带的审计功能更省心
其实JHipster已经集成了Spring Data JPA的审计,不用手动初始化日期。如果你的实体继承了AbstractAuditingEntity(JHipster生成的实体默认会加这个继承),直接用注解让框架自动处理:
@CreatedDate @Column(name = "creation_date", nullable = false, updatable = false) private LocalDate creationDate; @LastModifiedDate @Column(name = "change_date", nullable = false) private LocalDate changeDate;
这样实体创建时会自动填充creationDate,每次更新时自动刷新changeDate,不用自己写= LocalDate.now(),更规范也不容易出错。
4. 前端确认配置
后端返回的LocalDate会序列化成"2024-05-20"这种字符串格式,你原来的Angular代码:
<td>{{project.creationDate | date:'YYYY-MM-DD'}}</td> <td>{{project.changeDate | date:'YYYY-MM-DD'}}</td>
是可以正常解析的。如果还是没显示,检查一下组件所在的模块有没有导入CommonModule——Angular的date管道需要这个模块支持。
5. 最后确认数据库字段
确保MySQL里的creation_date和change_date是DATE类型,和Java的LocalDate对应上,数据就能正常流转了。
内容的提问来源于stack exchange,提问作者PhilReinhard

