jsonformat注解,jsonformat注解无效
Spring Boot使用@JsonProperty,@JsonIgnore,@JsonFormat注解
@JsonProperty, @JsonIgnore 和 @JsonFormat 注解都是 fasterxml jackson 里面的注解,现在也被 Spring Boot 集成了。
这里需要注意的是将对象转换成json字符串使用的方法是fasterxml.jackson提供的!!
如果使用fastjson
dependency
groupIdcom.alibaba/groupId
artifactIdfastjson/artifactId
version1.2.28/version
/dependency
没有生效,为啥?
因为fastjson不认识@JsonProperty注解呀!所以要使用jackson自己的序列化工具方法
我们在使用上面的注解时,不需要在 pom.xml 显示的引入 fasterxml jackson 的依赖包。只需要加入如下依赖即可。
@JsonProperty
用于属性、setter / getter 方法上,属性序列化后可重命名
生成的 json 字符串就是image_width和image_height。
@JsonIgnore
属性使用此注解后,将不被序列化。
@JsonFormat
用于格式化日期
@JsonInclude,@JsonIgnoreProperties,@JsonIgnore
真实案例
{
"rowid": "111111",
"created": "2018-12-27 16:15:25",
"createdby": "1111111",
"lastupd": "2018-12-27 08:25:48",
"lastupdby": "111111",
"modificationnum": 1
}
返回Json参数字段均为小写,在接收时,需要按照标准的命名规则进行映射
解决办法:
创建接收数据对象,生成Get\Set方法:,在Set方法上,加上@JsonProperty注解,
@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把rowId属性序列化为rowid,@JsonProperty("rowid")。
Text '2022-1-3' could not be parsed at index 5什么意思
格式转换错误
解决措施:
Model实体内属性timeTamp加上注解@JsonFormat和@DateTimeFormat
第一个注解@JsonFormat是解析数据库传过来的时间,将其转换为自己定义的格式(即pattern)后发送到网页接收;@DateTimeFormat为解析前端json发送的时间字符串将其转为正确的格式。
在调试接口的时候,前端的Json时间数据需要为正确的"yyyy-mm-dd HH:MM:SS"即”2020-04-28 17:53:02“才能被正确解析。
ListUser List = JSONArray.parseArray(jsonData.getJSONArray("前端发送过来的集合名").toJSONString(),User.class);
这里用的是Fastjson里的JSONArray类。这一步就是将前端的包含集合的json正确解析至自己定义的集合了
SpringBoot @JsonIgnoreProperties、@JsonIgnore、@JsonFormat注解的简单使用
类上添加了@JsonIgnoreProperties(value = {"password"}) 注解,即忽略password字段,不会返回password
@JsonIgnore注解用来忽略某些字段,可以用在变量或者Getter方法上,用在Setter方法时,和变量效果一样。这个注解一般用在我们要忽略的字段上。
@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段。这个注解还可以指定要忽略的字段,例如@JsonIgnoreProperties({ “password”, “secretKey” })
@JsonFormat可以帮我们完成格式转换。例如对于Date类型字段,如果不适用JsonFormat默认在rest返回的是long,如果我们使用@JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”),就返回"2018-11-16 22:58:15"
comment、fullName、address属性被忽略了,regDate的格式进行转换