日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

實例詳解SpringBoot默認的JSON解析方案

瀏覽:24日期:2023-12-01 17:30:37
目錄一、什么是JSON二、如何在SpringBoot中使用JSON三、舉例四、拓展總結一、什么是JSON

JSON(JavaScript Object Notation)是一種基于JavaScript語法子集的開放標準數據交換格式。JSON是基于文本的,輕量級的,通常被認為易于讀/寫。

好了,廢話不多說,下面開始介紹如何在SpringBoot中使用JSON。

二、如何在SpringBoot中使用JSON

在學習json之前,我們必須先了解一下HttpMessageConverter,其實看名字就知道,這是一個消息轉換工具。

下面我來介紹一下它的兩個功能:

1、將服務端返回的對象序列化成 JSON 字符串。

2、將前端傳來的 JSON 字符串反序列化成 Java 對象。

所有的 JSON 生成都離不開相關的 HttpMessageConverter。

SpringMVC 自動配置了 Jackson 和 Gson 的 HttpMessageConverter,Spring Boot 中又對此做了自動化配置,下面是兩者對應源碼的路徑:

org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration

org.springframework.boot.autoconfigure.http.GsonHttpMessageConvertersConfiguration

所以,如果用戶使用 jackson 和 gson 的話,沒有其他額外配置,則只需要添加依賴即可。

三、舉例

第一步】老規矩,先創建一個SpringBoot項目。通過右邊的Maven可以看到,其實SpringBoot已經將json集成進來了,Maven結構如下圖:

實例詳解SpringBoot默認的JSON解析方案

第二步】創建一個bean和一個controller類,具體項目結構和代碼如下:

【項目結構】

實例詳解SpringBoot默認的JSON解析方案

【User.java】

package com.mango.json.bean;import com.fasterxml.jackson.annotation.JsonFormat;import java.util.Date;public class User { private Integer id; private String username; private String address;public Integer getId() {return id; } public void setId(Integer id) {this.id = id; } public String getUsername() {return username; } public void setUsername(String username) {this.username = username; } public String getAddress() {return address; } public void setAddress(String address) {this.address = address; }}

【UserController.java】

package com.mango.json.controller;import com.mango.json.bean.User;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;import java.util.Date;import java.util.List;@RestControllerpublic class UserController { @GetMapping('/user') public List<User> getUser() {List<User> userList = new ArrayList<>();for (int i = 0; i < 10; i++) { User user = new User(); user.setId(i); user.setUsername('mango>>>' + i); user.setAddress('www.mango.com>>>' + i); user.setBirthday(new Date()); userList.add(user);}return userList; }}

【運行結果】

實例詳解SpringBoot默認的JSON解析方案

注:大家可能和我顯示的效果不一樣,但是內容肯定是一樣的,如果需要顯示成我這樣格式,需要給瀏覽器裝一款插件JSONView,這款插件就專門為json格式設計的,因為很復雜的json格式,是不容易閱讀的。

四、拓展

上面就是SpringBoot中json的簡單用法,下面我會再針對json進行一點內容的拓展。

1、如果碰到bean中有日期類型的屬性,json該怎么處理日期格式?

第一種辦法】我們可以在該屬性上添加@JsonFormat(pattern = “yyyy-MM-dd”)注解,代碼如下:

package com.mango.json.bean;import com.fasterxml.jackson.annotation.JsonFormat;import java.util.Date;public class User { private Integer id; private String username; private String address;@JsonFormat(pattern = 'yyyy-MM-dd') private Date birthday; public Date getBirthday() {return birthday; } public void setBirthday(Date birthday) {this.birthday = birthday; } public Integer getId() {return id; } public void setId(Integer id) {this.id = id; } public String getUsername() {return username; } public void setUsername(String username) {this.username = username; } public String getAddress() {return address; } public void setAddress(String address) {this.address = address; }}

如果該bean中存在許多日期類型的屬性呢,這么做就不是那么合適了,所以,可以采用下面的第二種辦法。

第二種辦法】大家都知道json肯定離不開ObjectMapper,因為json格式和java中的對象之間進行轉換就是通過ObjectMapper類,想深入研究的朋友可以看看這個類的源碼。

在上面我提到了SpringBoot自動化配置json,也給出了json源碼的路徑,大家可以進去看看,是否看到下面一段代碼,這就是它的核心之處。

@Configuration(proxyBeanMethods = false)@ConditionalOnClass(ObjectMapper.class)@ConditionalOnBean(ObjectMapper.class)@ConditionalOnProperty(name = HttpMessageConvertersAutoConfiguration.PREFERRED_MAPPER_PROPERTY,havingValue = 'jackson', matchIfMissing = true)static class MappingJackson2HttpMessageConverterConfiguration {@Bean@ConditionalOnMissingBean(value = MappingJackson2HttpMessageConverter.class,ignoredType = {'org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter','org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter' })MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {return new MappingJackson2HttpMessageConverter(objectMapper);}}

其中,mappingJackson2HttpMessageConverter方法就是我們需要用到的,這是SpringBoot為我們默認提供的,如果我們不重寫這個方法,默認它就會生效,反之則失效。換句話說,我們不管是否重寫該方法,json我們都可以用。

既然我們現在有需求了,我們就重寫這個方法,具體代碼如下:

【WebMvcConfig.java】

package com.mango.json.config;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;import java.text.SimpleDateFormat;@Configurationpublic class WebMvcConfig { @Bean MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();ObjectMapper objectMapper = new ObjectMapper();objectMapper.setDateFormat(new SimpleDateFormat('yyyy-MM-dd'));converter.setObjectMapper(objectMapper);return converter; }}

注:重寫這個方法后,我們可以將bean中的注解@JsonFormat(pattern = “yyyy-MM-dd”)注釋掉,重啟項目即可。(如果大家有興趣,可以進行debug調試,看看默認的方法是否還有效)

其實,大家可以從上面的代碼看到,我們真正對日期格式進行設置的是對ObjectMapper進行操作的,所以這段重寫的代碼是否可以精簡呢?答案是:當然可以。

有心的朋友肯定留意到了,上面SpringBoot默認提供的mappingJackson2HttpMessageConverter(ObjectMapper objectMapper)方法中,是存在ObjectMapper的,至于這個ObjectMapper是從哪里來的,大家可以根據下面路徑中的源碼看看:

【JacksonAutoConfiguration.java源碼路徑】

org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration

【具體源碼如下】

@Configuration(proxyBeanMethods = false)@ConditionalOnClass(Jackson2ObjectMapperBuilder.class)static class JacksonObjectMapperConfiguration {@Bean@Primary@ConditionalOnMissingBeanObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {return builder.createXmlMapper(false).build();}}

對,其實mappingJackson2HttpMessageConverter(ObjectMapper objectMapper)方法中ObjectMapper就是上面源碼中jacksonObjectMapper方法返回的ObjectMapper,大家可以debug試一下,看看是否正確。

廢話不多說了,下面我就重寫ObjectMapper,具體代碼如下:

【WebMvcConfig.java】

package com.mango.json.config;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;import java.text.SimpleDateFormat;@Configurationpublic class WebMvcConfig { /*@Bean MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();ObjectMapper objectMapper = new ObjectMapper();objectMapper.setDateFormat(new SimpleDateFormat('yyyy-MM-dd'));converter.setObjectMapper(objectMapper);return converter; }*/ @Bean ObjectMapper objectMapper(){ObjectMapper objectMapper = new ObjectMapper();objectMapper.setDateFormat(new SimpleDateFormat('yyyy-MM-dd'));return objectMapper; }}

【運行結果】

實例詳解SpringBoot默認的JSON解析方案

注:因為上面兩種方法最后的結果都是一樣的,所以運行結果圖只放一張。

總結

到此這篇關于SpringBoot默認的JSON解析方案的文章就介紹到這了,更多相關SpringBoot默認JSON解析內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
美女国产精品| 久久国产麻豆精品| 国产亚洲一区在线| 久久精品国产亚洲aⅴ| 成人影视亚洲图片在线| 蜜桃久久av| 久久国产精品成人免费观看的软件| 亚洲午夜久久久久久尤物| 国产精品地址| 亚州欧美在线| 亚洲欧美久久久| 欧洲av不卡| 国产成人精品免费视| 日韩高清电影一区| 亚洲精品字幕| 免费在线观看精品| 国产精品毛片| 午夜在线视频一区二区区别| 亚洲第一精品影视| sm捆绑调教国产免费网站在线观看| 国产伦精品一区二区三区千人斩| 在线日韩一区| 久久精品1区| 国产99久久久国产精品成人免费| 神马日本精品| 美女亚洲一区| 一区免费在线| 蜜桃传媒麻豆第一区在线观看| a天堂资源在线| 国产精品久久久久久久久久齐齐| 亚洲一二三区视频| 日韩av成人高清| 国产精品啊啊啊| 国产一区二区色噜噜| 国产日韩欧美一区二区三区| 国产精品毛片| 免费在线观看视频一区| 亚洲精选91| 国产精品久久免费视频| 久久爱www成人| 色一区二区三区四区| 国产suv精品一区二区四区视频| 欧美gv在线| 日韩高清不卡一区二区| 日韩av电影一区| 日本国产一区| 欧美在线看片| 国内精品美女在线观看| 私拍精品福利视频在线一区| 在线中文字幕播放| 亚洲专区欧美专区| 国产一区二区久久久久| 日韩av二区| 中文字幕在线免费观看视频| 欧美肉体xxxx裸体137大胆| 91成人超碰| 国产中文欧美日韩在线| 国产伦精品一区二区三区千人斩| 日韩另类视频| 亚洲影视一区二区三区| 久久永久免费| 亚洲免费一区二区| 日韩一区欧美| 国产香蕉精品| 午夜日本精品| 国产成人免费av一区二区午夜| 国产农村妇女精品一二区| 国产精品亚洲欧美日韩一区在线| 久久久久一区| 91视频一区| 久久精品国产网站| 久久国内精品自在自线400部| 在线视频精品| jiujiure精品视频播放| 91精品久久久久久久久久不卡| 久久超碰99| 国产精品一卡| 亚洲精品伦理| 亚洲美女91| 亚洲欧美一区在线| 免费在线小视频| 国产日韩三级| 国产精品白丝久久av网站| 青青伊人久久| 日本aⅴ免费视频一区二区三区| 国产一区成人| 久久高清国产| 美国欧美日韩国产在线播放| 午夜日韩av| 自拍日韩欧美| 欧美女激情福利| 日韩专区欧美专区| 日韩高清二区| 国产精品成人一区二区网站软件| 亚洲精品自拍| 亚洲资源在线| 欧美日韩99| 国产精品久久观看| 久久久久91| 男女性色大片免费观看一区二区| 日韩中文字幕| 久久国产乱子精品免费女| 久久久久久亚洲精品美女| 日韩在线短视频| 国产精品日本欧美一区二区三区| 免费高清在线一区| 国产精品欧美在线观看| 日韩精品一区二区三区免费观看| 欧美肉体xxxx裸体137大胆| 在线一区欧美| 日本欧美一区二区| 国产96在线亚洲| 蜜桃久久av| 国产精品白丝av嫩草影院| 999久久久精品国产| 日韩福利在线观看| 日韩在线短视频| 国产视频一区二| 亚洲精品一二三区区别| 国产精久久久| 国产韩日影视精品| 97se亚洲| 亚洲欧洲一区| 国产粉嫩在线观看| 亚洲日韩视频| 韩国三级一区| 国产精品极品在线观看| 1024精品久久久久久久久| 国产午夜久久| 好吊一区二区三区| 国产精品久久久久久av公交车 | 91欧美日韩| 亚洲视频电影在线| 婷婷激情图片久久| 日韩电影免费在线观看| 欧美成a人片免费观看久久五月天| 99视频一区| 蜜臀av免费一区二区三区| 国产亚洲久久| 日韩手机在线| 欧美午夜不卡| 国产精品久久久久av电视剧| 欧美久久精品| 久久精品 人人爱| 日韩av网站免费在线| 亚洲免费播放| 亚洲一区二区三区四区五区午夜 | 免费精品国产的网站免费观看| 久久中文在线| 91视频久久| 日本国产精品| 一区二区视频欧美| 欧美sss在线视频| 亚洲先锋成人| 久久一级电影| 999国产精品| 欧美一区二区三区激情视频| 欧美日韩水蜜桃| 久久国产成人| 西西人体一区二区| 亚洲精品欧美| 蜜臀久久99精品久久久画质超高清 | 久久蜜桃精品| 妖精视频成人观看www| 亚洲精品伊人| 精品精品99| 中文亚洲免费| 国产日韩欧美一区在线| 美腿丝袜亚洲一区| 蜜桃久久久久久| 久久永久免费| 亚洲一区二区成人| 你懂的国产精品永久在线| 九九在线精品| 国产剧情一区二区在线观看| 日韩高清中文字幕一区二区| 国产综合精品一区| 久久夜色精品| 国产一在线精品一区在线观看| 日韩欧美中文字幕在线视频| 国产一区二区三区精品在线观看| 成人精品天堂一区二区三区| 日韩三区四区| 精品欧美久久| 狠狠久久伊人中文字幕| 亚洲日本欧美| xxxxx性欧美特大| 国产色噜噜噜91在线精品| 天堂网在线观看国产精品| 你懂的国产精品| 日韩精品成人| 亚洲免费毛片| 亚洲一区二区三区四区电影| 丝袜诱惑制服诱惑色一区在线观看| 欧洲毛片在线视频免费观看| 久久精品国产亚洲夜色av网站 | 国产日韩在线观看视频| 日韩精品欧美大片| 欧美精品中文字幕亚洲专区| 久久狠狠久久|