您好,登錄后才能下訂單哦!
這篇文章主要介紹“關于@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的使用區別有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。