这篇文章主要介绍“关于@JSONField和@JsonFormat的使用区别有哪些”,在日常操作中,相信很多人在关于@JSONField和@JsonFormat的使用区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”关于@JSONField和@JsonFormat的使用区别有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
@JSONField是阿里巴巴下fastjson下的,@JsonFormat是jackson下面的。
1.1、name的用法:
实体类:
package com.xiaobu.entity;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author xiaobu
* @version JDK1.8.0_171
* @date on 2018/12/4 19:00
* @description V1.0
*/
@Data
public class Roles implements Serializable {
private static final long serialVersionUID = 5775171105018867238L;
@JSONField(name = "role_id")
@Column(name = "RoleId")
private Integer RoleId;
@JSONField(name = "role_desc")
@Column(name = "RoleDesc")
private String RoleDesc;
}
测试类:
/**
* @author xiaobu
* @date 2018/12/5 16:53
* @descprition 表明 json不区分大小写都能转换
* @version 1.0
* bean to JSON:{"role_desc":"admin","role_id":8}
* 需要转换的json:{"ROLE_DESC":"ADMIN","ROLE_ID":8}
* RoleDesc:ADMIN
*/
@Test
public void testJSONField(){
Roles roles = new Roles();
roles.setRoleDesc("admin");
roles.setRoleId(8);
String jsonStr=JSONObject.toJSONString(roles);
System.out.println("bean to JSON:"+jsonStr);
//改变json的key为大写
jsonStr = jsonStr.toUpperCase();
System.out.println("需要转换的json:" + jsonStr);
roles = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), Roles.class);
System.out.println("RoleDesc:"+roles.getRoleDesc());
}
1.2 format的用法:
实体类:
/**
* 任务接收时间
*/
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
@JSONField(format = "yyyy-MM-dd")
@Column(name="TaskAcceptTime")
private Date TaskAcceptTime;
/**
*任务完成时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@JSONField(format = "yyyy-MM-dd")
@Column(name="TaskCompleteTime")
private Date TaskCompleteTime;
测试类:
@Test
public void findByExample() {
Task task = new Task();
task.setTaskId("HYR08274-0804");
Example example = new Example(Task.class);
Example.Criteria criteria = example.createCriteria();
if (StringUtils.isNotBlank(task.getTaskId())) {
criteria.andLike("TaskId", "%" + task.getTaskId() + "%");
}
//TaskAcceptTime=Mon Aug 04 00:00:00 CST 2008,TaskCompleteTime=Fri Nov 07 00:00:00 CST 2008
List<Task> tasks = taskMapper.selectByExample(example);
System.out.println(tasks);
//""taskAcceptTime":"2008-08-04","taskCompleteTime":"2008-11-07"
String fastJsonStr = JSON.toJSONString(tasks);
System.out.println("fastJsonStr = " + fastJsonStr);
ObjectMapper MAPPER = new ObjectMapper();
try {
//""TaskAcceptTime":"2008-08-04","TaskCompleteTime":"2008-11-07 00:00:00"
String ujosn = MAPPER.writeValueAsString(tasks);
System.out.println("ujosn = " + ujosn);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") 必须加上时区。
@JSONField(format = "yyyy-MM-dd")
这两个的作用都是格式化日期时间。且只能作用在日期时间上。
补充:前台传后台
@DateTimeFormat(pattern="yyyy-MM-dd")
@JsonFormat ,使用该注解前需要添加 jackson 相关的依赖包
用于服务器传给前端json数据时对Date类型时间进行的格式化
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
pattern就表示需要转变的格式,timezone表示处在的时区(国内是东八区)
因为,jackson在序列化时间时是按照国际标准时间GMT进行格式化的,而在国内默认时区使用的是CST时区,两者相差8小时
如果没有用@JsonFormat 对时间进行格式化,返回给前端的将是一个时间戳。如图所示。
使用了@JsonFormat之后,时间格式正确显示。如图所示。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
注意事项
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
pattern中定义的格式的大小写要注意,不要写错。。。
@DateTimeFormat是spring的注解,spring工程下不在需要额外引入其他依赖
由于客户端传给服务端的时间参数是字符串类型,如果直接使用java.util.Date下的Date接受的话,会报400的异常(400异常表示服务器不处理该请求,多半是传入的参数问题)
可以使用@DateTimeFormat将客户端发送过来的时间参数转换成想要的类型
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
pattern定义需要转换的格式(跟前面一样。大小写需要严格定义)
这样
服务端就可以正确接收,打印的时间参数为
Mon Apr 01 16:26:25 CST 2019
注意:@JsonFormat与@DateTimeFormat只是定义时间参数在客户端和服务端之间转换格式,控制台、Debug显示的还是java.util.Date下的Date类型形式,如果想要转换的话可以自己使用SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
一些特殊情况
如果使用pattern = "yyyy-MM-dd"接收上述客户端的参数
@DateTimeFormat(pattern = "yyyy-MM-dd")
这样也能正确接收到,但是会将时分秒全部置为00
Mon Apr 01 00:00:00 CST 2019
如果使用pattern = "yyyy-MM-dd HH:mm:ss"接收客户端传来的没有时分秒的参数
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
会报400异常!
到此,关于“关于@JSONField和@JsonFormat的使用区别有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。