当前位置: 首页 > news >正文

注解作用:@DateTimeFormat, @JsonFormat,@JsonProperty,@JsonIgnoreProperties(value={“hibernateLazyInitializ

@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") 反序列化时候给前台的数据格式化了
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
) 序列化时候前台给后台的数据存库格式化
private Date submitdate;

  • @JsonFormat(Jackson 家的):负责JSON 格式的交互。

    • 无论是返回(序列化)还是接收(反序列化),只要前端传的是application/json,并且后端用@RequestBody接收,都由它管

    • 你注释为“返回前端”不完整,它其实也管接收(比如前端传"2026-08-14"进来,它负责转成 Java 对象)。

  • @DateTimeFormat(Spring 家的):负责非 JSON 格式的交互。

    • 管的是表单提交application/x-www-form-urlencoded)、URL 查询参数@RequestParam)和路径变量@PathVariable)。

    • 你注释为“接收前端”是对的,但只限于表单/URL传参场景,JSON传参它无效。

2. 两个都写时,到底谁生效?(重点)

如果字段是日期类型(如Date,且前端传的是JSON

  • @JsonFormat会完全接管@DateTimeFormat会被忽略(因为 Jackson 处理 JSON 的优先级高于 Spring 的格式化)。

  • 如果只写@DateTimeFormat而不写@JsonFormat,那么返回 JSON 给前端时,日期会变成 Jackson 默认的时间戳(数字)格式(比如1723651200000),而不是你想要的yyyy-MM-dd

js中格式化时间:var time= cpic.getSystemTime();

time.format("yyyy-MM-dd");

*****************************************************

遇到一个问题,前端按照平常方式传给我json对象,属性名和我一致,我在controller层也按平常方式使用@RequestBody注解,用相应的实体类接收参数,但别人可以成功接到参数,而我的却不能,在实体类的成员变量上增加@JsonProperty("属性名"),就解决了问题

查了一下这个注解:

@JsonProperty 此注解用于属性上,作用是把该属性的名称反序列化为另外一个名称,如把trueName属性反序列化为name,返回前端

@JsonProperty("name")。

import com.fasterxml.jackson.annotation.JsonProperty;

public class Student implements Serializable{

@JsonProperty("name")
private String trueName;

public String getTrueName() {
return trueName;
}

public void setTrueName(String trueName) {
this.trueName = trueName;
}
}

测试一下

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
public static void main(String[] args) throws JsonProcessingException {
Student student = new Student();
student.setTrueName("张三");

//使用writeValuesAsString的方法就可以把对角转化成json字符串。

System.out.println(new ObjectMapper().writeValueAsString(student));
}
}

得到结果

{"name":"张三"}

注意事项:类和父类必须都实现序列化后,才可以反序列化,类没有实现序列化,也可以使用此注解序列化

感觉这个注解的作用是:1.前端传参数过来的时候,使用这个注解,可以获取到前端与注解中同名的属性 2。后端处理好结果后,返回给前端的属性名也不以实体类属性名为准,而以注解中的属性名为准

@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)private String message;

可以将值返回前端时候忽略掉,比如密码不需要显示在前端数据中

但是从前端传送给后端时候可以保存到数据库中

JsonProperty.Access.READER_ONLY 就是读

******************************

Jackson相关:

使用Jackson相关的注解时一定要注意自己定义的属性命名是否规范。

命名不规范时会失去效果。(例如Ename ,Eage 为不规范命名。“nameE”,“ageE”为规范命名)我在此处掉坑半个小时。至于命名规范,大家自己搜索。其实不要太奇葩的命名都是可以得。

如果使用@JsonIgnore注解不起效时请注意一下你的属性名字是否规范

1、@JsonIgnoreProperties

此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

写法将此标签加在model 类的类名上 ,可以多个属性也可以单个属性

//生成json时将name和age属性过滤

@JsonIgnoreProperties({"name"},{"age"})

public class user {

private String name;

private int age;

}

//生成json时将name和age属性过滤

@JsonIgnoreProperties({"name"},{"age"})

public class user {

private String name;private int age;

}

2、@JsonIgnore

此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。

生成json 时不生成age 属性

public class user {

private String name;

@JsonIgnore

private int age;

}

3、@JsonFormat

此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”)

4、@JsonSerialize

此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。

5、@JsonDeserialize

此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize

6、@Transient

@[email protected]�射,ORM框架将忽略该属性;

如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic;

//表示该字段在数据库表中没有

@Transient

public int getAge() {

return 1+1;

}


http://www.jsqmd.com/news/1398595/

相关文章:

  • 2026丽水极简风一门到顶定制未来之境这4个细节做对不变形 - 科技先行者
  • 网盘下载太慢太折腾?一个脚本搞定八大网盘直链下载
  • 3步搞定微博备份:Speechless免费导出PDF,你的微博从此不怕丢
  • 安装codex时出现Codex运行时发生错误:此环境中的Codex版本过旧,请更新到更高版本的解决方案
  • data-juicer运行报错,日志文件路径无法找到:D:\WorkRes\EnvDataJuicer\dj-practice\20260320_061824_de1d34\logs\...如何解决?
  • 内行真心推荐:2026成都LV香奈儿名包回收靠谱网点盘点,零纠纷变现 - 资讯快报员
  • 蓝奏云直链解析API怎么用?一个PHP文件,把分享链接变成可下载的直链
  • 浏览器内存优化免费方案:Marvellous Suspender 快速挂起闲置标签页
  • 2026年北京家财险赔漏水吗漏水损失保险理赔条件流程详解 - 科技先行者
  • 国内包装印刷彩盒包装包装盒批发实力厂家推荐指南 ——如何从上千家印刷包装企业中,选出真正可靠的合作伙伴 - 行业分析师
  • KMS_VL_ALL_AIO 一键激活 Windows 与 Office:从脚本原理到完整实操指南
  • 王明哲老师线上课程:手把手教你掌握新一代AI工具
  • AI 自动化工具 OpenClaw 从解压到可使用完整实操教程(含安装包)
  • 广州周大福传承系列黄金回收实测:五家门店称重报价全记录 - 资讯快报员
  • 告别启动报错:一份免费清单装齐 2005-2022 全部 Visual C++ 运行库
  • Use iFix SQL Blocks with RDBs(SQL SERVER 2008) - 详细、完整篇
  • 四、buildroot中添加自己的软件包
  • Maven Helper插件实战:快速定位与解决Java项目依赖冲突
  • 哈尔滨2026年黄金回收节假日行情变化规律,避开低价变现高峰期 - 每日快报资讯
  • C# Modbus插件化架构:10分钟构建可配置的工业数据采集系统
  • 信号产生后,会不会有那么一瞬间在未决信号集相应位里会变为1呢?
  • 盐城吸污车清运化粪池该怎么预约?完整操作流程一文给你讲清 - GrowthUME
  • 国密门禁怎么选?2026专业品牌对比
  • Jupyter Notebook高效配置指南:从安装到一键启动的完整方案
  • AI Agent 面试题 393:如何设计Agent的记忆重要性评分机制?
  • YimMenu使用指南:GTA5免费增强菜单从安装到进阶防护全攻略
  • 暴力破解攻防全解析:从原理到实战的密码安全指南
  • AI情感分析技术解析:从NLP原理到产品伦理的深度思考
  • 免费开源 PLC 编程工具 OpenPLC Editor 从零上手完整指南
  • 最新方法:手把手教你用小程序拼接多图 - 工具软件使用方法推荐