<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
百度了不少解決方式,有讓用@JsonField,也有讓把fastjson去掉的,也有加很多設定的,但是都沒用。
1、springboot2.2.2 ;
2、fastjson 1.1.26
3、<jackson-mapper-asl.version>1.9.10</jackson-mapper-asl.version>
<jackson-core.version>2.10.3</jackson-core.version>
第三點以及相關的依賴可能不需要,加上也沒關係
pom檔案中的依賴:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>${jackson-mapper-asl.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson-core.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson-core.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson-core.version}</version> </dependency>
第一步新建一個轉換類 用於自定義Jackson反序列化日期型別時應用的型別轉換器,一般用於@RequestBody接受引數時使用
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import java.io.IOException; import java.text.ParseException; import java.util.Date; /** * 自定義Jackson反序列化日期型別時應用的型別轉換器,一般用於@RequestBody接受引數時使用 * 次類是借用網上別的人的,增加了一個日期格式化的型別 */ public class DateJacksonConverter extends JsonDeserializer<Date> { //此處尤為重要,請查詢自己控制檯報錯的日期格式化型別是啥樣的 //我的是2020-04-29T16:23:44.999Z 所以我在下面的陣列中新增了 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 格式;如果下面陣列中沒有你要的格式化型別,其他的可自行根據自己的情況去新增即可 private static String[] pattern = new String[]{"yyyy-MM-dd", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm:ss.S", "yyyy.MM.dd", "yyyy.MM.dd HH:mm", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm:ss.S", "yyyy/MM/dd", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss.S", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"}; @Override public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { Date targetDate = null; String originDate = p.getText(); if (StringUtils.isNotEmpty(originDate)) { try { long longDate = Long.valueOf(originDate.trim()); targetDate = new Date(longDate); } catch (NumberFormatException e) { try { targetDate = DateUtils.parseDate(originDate, DateJacksonConverter.pattern); } catch (ParseException pe) { throw new IOException(String.format( "'%s' can not convert to type 'java.util.Date',just support timestamp(type of long) and following date format(%s)", originDate, StringUtils.join(pattern, ","))); } } } return targetDate; } @Override public Class<?> handledType() { return Date.class; } }
建立好上邊的類之後,如果不想繼續,則可以在實體物件屬性上加註解就完全可以了。
匯入的包路徑為:
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(using=DateJacksonConverter.class) private Date startDate;
如果不想去讓實體類加這個註解,可以在寫一個公共設定,如下:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import com.fasterxml.jackson.databind.ObjectMapper; import com.fx.base.serializer.DateJacksonConverter; @Configuration public class ConverterConfig { @Bean public DateJacksonConverter dateJacksonConverter() { return new DateJacksonConverter(); } @Bean public Jackson2ObjectMapperFactoryBean jackson2ObjectMapperFactoryBean( @Autowired DateJacksonConverter dateJacksonConverter) { Jackson2ObjectMapperFactoryBean jackson2ObjectMapperFactoryBean = new Jackson2ObjectMapperFactoryBean(); jackson2ObjectMapperFactoryBean.setDeserializers(dateJacksonConverter); return jackson2ObjectMapperFactoryBean; } @Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter( @Autowired ObjectMapper objectMapper) { MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper); return mappingJackson2HttpMessageConverter; } }
此時就不必再每個實體類屬性上加註解了。
@DatetimeFormat
是將String轉換成Date,一般前臺給後臺傳值時用import org.springframework.format.annotation.DateTimeFormat; /** * 前臺傳後臺時, 字串自動封裝成日期 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date birth;
@JsonFormat(pattern=”yyyy-MM-dd”)
將Date轉換成String 一般後臺傳值給前臺時import com.fasterxml.jackson.annotation.JsonFormat; /** * 後臺返給前臺時, 日期自動格式化 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date birth;
注意:
@JsonFormat不僅可以完成後臺到前臺引數傳遞的型別轉換,還可以實現前臺到後臺型別轉換。
當content-type為application/json時,優先使用@JsonFormat的pattern進行型別轉換。而不會使用@DateTimeFormat進行型別轉換。
@JsonFormat註解的作用就是完成json字串到java物件的轉換工作,與引數傳遞的方向無關。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45