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

您的位置:首頁技術(shù)文章
文章詳情頁

Spring mvc Json處理實(shí)現(xiàn)流程代碼實(shí)例

瀏覽:161日期:2023-08-12 16:20:08

接收J(rèn)SON

瀏覽器傳來的參數(shù),可以是 key/value 形式的,也可以是一個(gè) JSON 字符串。在 Jsp/Servlet 中,我們接收 key/value 形式的參數(shù),一般是通過 getParameter 方法。如果客戶端商戶傳的是 JSON 數(shù)據(jù),我們可以通過如下格式進(jìn)行解析:

@RequestMapping('/addbook2')@ResponseBodypublic void addBook2(HttpServletRequest req) throws IOException { ObjectMapper om = new ObjectMapper(); Book book = om.readValue(req.getInputStream(), Book.class); System.out.println(book);}

但是這種解析方式有點(diǎn)麻煩,在 SpringMVC 中,我們可以通過一個(gè)注解來快速的將一個(gè) JSON 字符串轉(zhuǎn)為一個(gè)對象:

@RequestMapping('/addbook3')@ResponseBodypublic void addBook3(@RequestBody Book book) { System.out.println(book);}

這樣就可以直接收到前端傳來的 JSON 字符串了。這也是 HttpMessageConverter 提供的第二個(gè)功能。

返回JSON

目前主流的 JON 處理工具主要有三種:

jackson

jackson 是一個(gè)使用比較多,時(shí)間也比較長的 JSON 處理工具,在 SpringMVC 中使用 jackson ,只需要添加 jackson 的依賴即可:

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.1</version></dependency>

依賴添加成功后,凡是在接口中直接返回的對象,集合等等,都會(huì)自動(dòng)轉(zhuǎn)為 JSON。如下:

public class Book { private Integer id; private String name; private String author;...}@RequestMapping('/book')@ResponseBodypublic Book getBookById() { Book book = new Book(); book.setId(1); book.setName('三國演義'); book.setAuthor('羅貫中'); return book;}

這里返回一個(gè)對象,但是在前端接收到的則是一個(gè) JSON 字符串,這個(gè)對象會(huì)通過 HttpMessageConverter 自動(dòng)轉(zhuǎn)為 JSON 字符串。

如果想返回一個(gè) JSON 數(shù)組,寫法如下:

@RequestMapping('/books')@ResponseBodypublic List<Book> getAllBooks() { List<Book> list = new ArrayList<Book>(); for (int i = 0; i < 10; i++) { Book book = new Book(); book.setId(i); book.setName('三國演義:' + i); book.setAuthor('羅貫中:' + i); list.add(book); } return list;}

converter 【肯喔特】轉(zhuǎn)變器

添加了 jackson ,就能夠自動(dòng)返回 JSON,這個(gè)依賴于一個(gè)名為 HttpMessageConverter 的類,這本身是一個(gè)接口,從名字上就可以看出,它的作用是 Http 消息轉(zhuǎn)換器,既然是消息轉(zhuǎn)換器,它提供了兩方面的功能:

將返回的對象轉(zhuǎn)為 JSON

將前端提交上來的 JSON 轉(zhuǎn)為對象

但是,HttpMessageConverter 只是一個(gè)接口,由各個(gè) JSON 工具提供相應(yīng)的實(shí)現(xiàn),在 jackson 中,實(shí)現(xiàn)的名字叫做 MappingJackson2HttpMessageConverter,而這個(gè)東西的初始化,則由 SpringMVC 來完成。除非自己有一些自定義配置的需求,否則一般來說不需要自己提供

MappingJackson2HttpMessageConverter。

舉一個(gè)簡單的應(yīng)用場景,例如每一本書,都有一個(gè)出版日期,修改 Book 類如下:

public class Book { private Integer id; private String name; private String author; private Date publish;...}

然后在構(gòu)造 Book 時(shí)添加日期屬性:

@RequestMapping('/book')@ResponseBodypublic Book getBookById() { Book book = new Book(); book.setId(1); book.setName('三國演義'); book.setAuthor('羅貫中'); book.setPublish(new Date()); return book;}

訪問 /book 接口,返回的 json 格式如下:

如果我們想自己定制返回日期的格式,簡單的辦法,可以通過添加注解來實(shí)現(xiàn):

public class Book { private Integer id; private String name; private String author; @JsonFormat(pattern = 'yyyy-MM-dd',timezone = 'Asia/Shanghai') private Date publish;

注意這里一定要設(shè)置時(shí)區(qū)。

這樣,就可以定制返回的日期格式了。

但是,這種方式有一個(gè)弊端,這個(gè)注解可以加在屬性上,也可以加在類上,也就說,最大可以作用到一個(gè)類中的所有日期屬性上。如果項(xiàng)目中有很多實(shí)體類都需要做日期格式化,使用這種方式就比較麻煩了,這個(gè)時(shí)候,我們可以自己提供一個(gè) jackson 的 HttpMesageConverter 實(shí)例,在這個(gè)實(shí)例中,自己去配置相關(guān)屬性,這里的配置將是一個(gè)全局配置。

在 SpringMVC 配置文件中,添加如下配置:

<mvc:annotation-driven> <mvc:message-converters> <ref bean='httpMessageConverter'/> </mvc:message-converters></mvc:annotation-driven><bean id='httpMessageConverter'> <property name='objectMapper'> <bean class='com.fasterxml.jackson.databind.ObjectMapper'> <property name='dateFormat'><bean class='java.text.SimpleDateFormat'> <constructor-arg name='pattern' value='yyyy-MM-dd HH:mm:ss'/></bean> </property> <property name='timeZone' value='Asia/Shanghai'/> </bean> </property></bean>

添加完成后,去掉 Book 實(shí)體類中日期格式化的注解,再進(jìn)行測試,結(jié)果如下:

gson

gson 是 Google 推出的一個(gè) JSON 解析器,主要在 Android 開發(fā)中使用較多,不過,Web 開發(fā)中也是支持這個(gè)的,而且 SpringMVC 還針對 Gson 提供了相關(guān)的自動(dòng)化配置,以致我們在項(xiàng)目中只要添加 gson 依賴,就可以直接使用 gson 來做 JSON 解析了。

<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version></dependency>

如果項(xiàng)目中,同時(shí)存在 jackson 和gson 的話,那么默認(rèn)使用的是 jackson,為什么呢?在org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter類的構(gòu)造方法中,加載順序就是先加載 jackson 的 HttpMessageConverter,后加載 gson 的 HttpMessageConverter。

加完依賴之后,就可以直接返回 JSON 字符串了。使用 Gson 時(shí),如果想做自定義配置,則需要自定義 HttpMessageConverter。

<mvc:annotation-driven> <mvc:message-converters> <ref bean='httpMessageConverter'/> </mvc:message-converters></mvc:annotation-driven><bean id='httpMessageConverter'> <property name='gson'> <bean factory-bean='gsonBuilder' factory-method='create'/> </property></bean><bean id='gsonBuilder'> <property name='dateFormat' value='yyyy-MM-dd'/></bean>

fastjson 號(hào)稱最快的 JSON 解析器,但是也是這三個(gè)中 BUG 最多的一個(gè)。在 SpringMVC 并沒針對 fastjson 提供相應(yīng)的 HttpMessageConverter,所以,fastjson 在使用時(shí),一定要自己手動(dòng)配置 HttpMessageConverter(前面兩個(gè)如果沒有特殊需要,直接添加依賴就可以了)。

使用 fastjson,我們首先添加 fastjson 依賴:

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.60</version></dependency>

然后在 SpringMVC 的配置文件中配置 HttpMessageConverter:

<mvc:annotation-driven> <mvc:message-converters> <ref bean='httpMessageConverter'/> </mvc:message-converters></mvc:annotation-driven><bean id='httpMessageConverter'> <property name='fastJsonConfig'> <bean class='com.alibaba.fastjson.support.config.FastJsonConfig'> <property name='dateFormat' value='yyyy-MM-dd'/> </bean> </property></bean>

fastjson 默認(rèn)中文亂碼,添加如下配置解決:

<mvc:annotation-driven> <mvc:message-converters> <ref bean='httpMessageConverter'/> </mvc:message-converters></mvc:annotation-driven><bean id='httpMessageConverter'> <property name='fastJsonConfig'> <bean class='com.alibaba.fastjson.support.config.FastJsonConfig'> <property name='dateFormat' value='yyyy-MM-dd'/> </bean> </property> <property name='supportedMediaTypes'> <list> <value>application/json;charset=utf-8</value> </list> </property></bean>

在 SpringMVC 中,對 jackson 和 gson 都提供了相應(yīng)的支持,就是如果使用這兩個(gè)作為 JSON 轉(zhuǎn)換器,只需要添加對應(yīng)的依賴就可以了,返回的對象和返回的集合、Map 等都會(huì)自動(dòng)轉(zhuǎn)為 JSON,但是,如果使用 fastjson,除了添加相應(yīng)的依賴之外,還需要自己手動(dòng)配置 HttpMessageConverter 轉(zhuǎn)換器。其實(shí)前兩個(gè)也是使用 HttpMessageConverter 轉(zhuǎn)換器,但是是 SpringMVC 自動(dòng)提供的,SpringMVC 沒有給 fastjson 提供相應(yīng)的轉(zhuǎn)換器。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩av午夜在线观看| 精品国产黄a∨片高清在线| 91精品一区二区三区综合| 国产精品www.| а√在线中文在线新版| 久久免费大视频| 午夜久久影院| 亚洲精品黄色| 国产精品a级| 日韩成人综合| 免费国产自久久久久三四区久久| 午夜久久影院| 日韩一区精品| 久久91视频| 成人免费网站www网站高清| 欧美日韩高清| 日韩精品a在线观看91| 国产va免费精品观看精品视频| 91综合网人人| 天使萌一区二区三区免费观看| 日韩精品三区四区| 久久久久久久欧美精品| 成人日韩精品| 石原莉奈在线亚洲三区| 国产伦精品一区二区三区千人斩| 国产专区精品| 夜久久久久久| 欧美亚洲福利| 国产一区清纯| 国产精品美女在线观看直播| 色综合www| 91精品国产一区二区在线观看| 丁香六月综合| 天堂俺去俺来也www久久婷婷| 日本精品黄色| 日本aⅴ精品一区二区三区| 欧美片第1页| 欧美日韩1区2区3区| 蜜臀av免费一区二区三区| 久久99偷拍| 日韩午夜高潮| 亚洲精品**中文毛片| 日韩精品三区四区| 欧美日韩在线二区| 久久中文欧美| 日韩欧美激情| 久久精品亚洲人成影院| 国产欧美88| 美女黄网久久| 日韩天堂在线| 麻豆精品在线观看| 亚洲无线观看| 91超碰国产精品| 国产成人精品免费视| 日本中文字幕视频一区| 亚洲人成在线网站| 国产精品成人自拍| 色8久久久久| 999久久久亚洲| 久久精品网址| 欧美中文高清| 亚洲三区欧美一区国产二区| 伊人精品一区| 天堂√中文最新版在线| 美女国产精品久久久| 日本aⅴ亚洲精品中文乱码 | 国产精品调教视频| 亚洲一区二区三区高清不卡| 日韩欧美二区| 美女在线视频一区| 国产日韩欧美| 国产日韩欧美一区| 欧美日韩91| 欧美一级一区| 在线免费观看亚洲| 噜噜噜久久亚洲精品国产品小说| 国产精品99一区二区| 久久久久国产精品一区二区| 麻豆国产在线| 神马久久午夜| 黑森林国产精品av| 国产一区调教| 麻豆极品一区二区三区| 久久精品凹凸全集| 久久精品99国产精品| 欧美一区激情| 国产麻豆精品| 久久中文精品| 亚洲国产欧美日本视频| 日韩在线免费| 欧美午夜精品一区二区三区电影| 午夜精品成人av| 久久中文字幕二区| 久久一区二区中文字幕| 欧美日韩国产高清| 午夜在线一区| 亚洲欧洲日韩精品在线| 一区二区自拍| 亚洲一级在线| 久久高清一区| 亚洲精品护士| 国产精品一级在线观看| 美女国产精品久久久| 国产一区2区| 91精品一区二区三区综合| 欧美日韩国产综合网| 中文一区在线| 在线一区二区三区视频| 日本成人在线网站| 国产精品mm| 日本免费久久| 91久久视频| 蜜桃久久av一区| 蜜桃视频免费观看一区| 久久激情av| 欧美日韩视频网站| 亚洲一区日本| 国产精品最新| 成人免费电影网址| 免费观看在线色综合| 国产精品亚洲四区在线观看| 成人亚洲精品| 日韩中文字幕麻豆| 国产欧美一区二区三区米奇| 国产成人精品亚洲线观看| 欧美日韩在线播放视频| 亚洲毛片视频| 国产精品超碰| 欧美91福利在线观看| 日韩高清在线不卡| 国产一区二区三区国产精品| 91精品高清| 欧美欧美黄在线二区| av亚洲一区二区三区| 亚洲精品裸体| caoporn视频在线| 亚洲一二三区视频| 国产成人精品三级高清久久91| 在线亚洲免费| 国产一区二区三区四区| 亚洲一区二区动漫| 麻豆传媒一区二区三区| 免费久久精品| 国产精品日韩精品在线播放| 国产一区二区三区自拍| 免费在线亚洲| 免费人成精品欧美精品| 亚洲精品成人图区| 日本在线成人| 激情综合在线| 国产精品高清一区二区| 99pao成人国产永久免费视频| 国产精品成人3p一区二区三区| 精品日韩毛片| 国产第一亚洲| 久久精品av麻豆的观看方式| 蜜臀久久99精品久久一区二区| 欧美一区=区三区| 欧美在线亚洲| 国产成人精品一区二区三区免费 | 久久亚洲风情| 韩国久久久久久| 欧美中文高清| 美女国产精品| 久久久久91| 久草精品视频| 日韩一区二区三区免费视频| 国户精品久久久久久久久久久不卡 | 久久国产三级| 久久xxxx| 亚洲欧洲一区二区天堂久久| www.51av欧美视频| 你懂的国产精品永久在线| 日韩有码av| 视频一区在线视频| 欧美+日本+国产+在线a∨观看| 精品日产乱码久久久久久仙踪林| 天堂精品久久久久| 欧美粗暴jizz性欧美20| 国产一区二区三区亚洲综合| 国产精品免费不| 久久国产婷婷国产香蕉| 亚洲精品综合| 六月天综合网| 99国产精品视频免费观看一公开 | 久久电影tv| 国产精品a久久久久| 69堂精品视频在线播放| 亚洲不卡视频| 亚洲免费福利一区| 鲁大师影院一区二区三区| 国产一区亚洲| 群体交乱之放荡娇妻一区二区| 国产粉嫩在线观看| 超碰在线99| 国产资源在线观看入口av| 国产aⅴ精品一区二区三区久久 | 日韩精品一二三区| 亚洲免费精品| 欧美日韩国产综合网|