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

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

Spring mvc Json處理實現流程代碼實例

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

接收JSON

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

@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);}

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

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

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

返回JSON

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

jackson

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

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

依賴添加成功后,凡是在接口中直接返回的對象,集合等等,都會自動轉為 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;}

這里返回一個對象,但是在前端接收到的則是一個 JSON 字符串,這個對象會通過 HttpMessageConverter 自動轉為 JSON 字符串。

如果想返回一個 JSON 數組,寫法如下:

@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 【肯喔特】轉變器

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

將返回的對象轉為 JSON

將前端提交上來的 JSON 轉為對象

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

MappingJackson2HttpMessageConverter。

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

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

然后在構造 Book 時添加日期屬性:

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

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

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

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

注意這里一定要設置時區。

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

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

在 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 實體類中日期格式化的注解,再進行測試,結果如下:

gson

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

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

如果項目中,同時存在 jackson 和gson 的話,那么默認使用的是 jackson,為什么呢?在org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter類的構造方法中,加載順序就是先加載 jackson 的 HttpMessageConverter,后加載 gson 的 HttpMessageConverter。

加完依賴之后,就可以直接返回 JSON 字符串了。使用 Gson 時,如果想做自定義配置,則需要自定義 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 號稱最快的 JSON 解析器,但是也是這三個中 BUG 最多的一個。在 SpringMVC 并沒針對 fastjson 提供相應的 HttpMessageConverter,所以,fastjson 在使用時,一定要自己手動配置 HttpMessageConverter(前面兩個如果沒有特殊需要,直接添加依賴就可以了)。

使用 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 默認中文亂碼,添加如下配置解決:

<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 都提供了相應的支持,就是如果使用這兩個作為 JSON 轉換器,只需要添加對應的依賴就可以了,返回的對象和返回的集合、Map 等都會自動轉為 JSON,但是,如果使用 fastjson,除了添加相應的依賴之外,還需要自己手動配置 HttpMessageConverter 轉換器。其實前兩個也是使用 HttpMessageConverter 轉換器,但是是 SpringMVC 自動提供的,SpringMVC 沒有給 fastjson 提供相應的轉換器。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区三区视频在线| 国产精品久av福利在线观看| 日韩欧美二区| 国产精品成人自拍| 欧美国产另类| 精品视频91| 91欧美在线| 日韩视频一区| 日本在线成人| 国产欧美日本| 国产精品s色| 国产精品99视频| 日韩精品永久网址| 国产乱子精品一区二区在线观看| 麻豆中文一区二区| 亚洲人成在线网站| 伊人成人网在线看| 亚洲ab电影| 国产探花一区| 国产福利91精品一区二区| 青青草91久久久久久久久| 精品一区二区三区四区五区| 四虎成人av| 亚洲国产综合在线看不卡| 好看不卡的中文字幕| 美国三级日本三级久久99| 在线亚洲精品| 欧洲亚洲一区二区三区| 国产在线观看www| 国产人成精品一区二区三| 国产激情在线播放| 亚洲精品极品| 亚洲婷婷免费| 精品久久网站| 久久狠狠亚洲综合| 视频一区二区三区中文字幕| 久久久国产精品一区二区中文| 日韩一二三区在线观看| 99久久亚洲精品| 精品视频网站| 欧美日韩网址| 日本国产一区| 麻豆精品一区二区综合av| 亚洲精品字幕| 免费视频亚洲| 国产成人免费| 国产精品天天看天天狠| 狠狠爱www人成狠狠爱综合网| 国产一区二区三区久久| 色婷婷成人网| 亚洲自啪免费| 久久激情网站| 伊人久久国产| 亚洲黄色免费av| 另类综合日韩欧美亚洲| 亚洲精品国模| 天使萌一区二区三区免费观看| 日韩欧美二区| а√天堂8资源中文在线| 欧美黑人巨大videos精品| 婷婷综合一区| 亚洲精选av| 日韩精品一二三区| 亚洲开心激情| 日av在线不卡| 欧美国产中文高清| 国产99亚洲| 免费看日韩精品| 欧美一区激情| 日韩精品一区二区三区中文| 蜜桃久久久久久| 亚洲少妇在线| 亚洲国产专区| 亚洲特色特黄| 99精品视频在线| 国产精品高颜值在线观看| 免费亚洲一区| 成人污污视频| 精品视频99| 激情综合婷婷| 久久精品国产在热久久| 久久狠狠久久| 国产亚洲字幕| 91午夜精品| 国产精品18| 精品国产精品久久一区免费式 | 欧美日韩免费观看一区=区三区 | 日韩av三区| 日韩高清一区二区| 亚洲不卡视频| 国产精品视频一区二区三区综合 | 日韩精品导航| 美女在线视频一区| 激情国产在线| 欧美日韩水蜜桃| 蜜桃伊人久久| 欧美日韩 国产精品| 国产精东传媒成人av电影| 精品视频一区二区三区在线观看| 成人在线免费观看网站| 亚洲伊人av| 99国产精品自拍| 97成人超碰| 成人在线黄色| 伊人久久婷婷| 青青草国产成人99久久| 久久99蜜桃| 久久久久久黄| 视频一区欧美精品| 国产欧美一区二区色老头| 精品国产欧美| 国产综合精品| 最新国产精品视频| 日韩精品高清不卡| 韩国女主播一区二区三区| 99精品视频在线| 久久电影一区| 国产精品亚洲二区| 日韩电影在线视频| 色黄视频在线观看| 久久亚洲欧美| 久久av免费看| 日韩视频二区| 国产日本亚洲| 国产传媒av在线| 亚洲自拍另类| 国内精品伊人| 99re国产精品| 精品国产成人| 日韩精品一级二级| 国产一区二区精品久| 国产麻豆综合| 久久av免费| 日韩午夜av在线| 免费在线亚洲| 国产一区导航| 精品一区av| 中文字幕成人| 国产传媒av在线| 久久aⅴ国产紧身牛仔裤| 国内不卡的一区二区三区中文字幕| 99视频一区| 国产欧美午夜| 伊人成人在线视频| 麻豆精品少妇| 久久国产66| 国产96在线亚洲| 亚洲人成毛片在线播放女女| 日韩一区二区三区免费播放| 日本国产欧美| 激情久久久久久久| 国产欧美激情| 国产女优一区| 国产不卡人人| 奇米色欧美一区二区三区| 色婷婷精品视频| 国产精品久久久久久久久免费高清| 亚洲婷婷免费| 91中文字幕精品永久在线| 青草av.久久免费一区| 欧美精选一区二区三区| 美日韩一区二区三区| 丝袜诱惑制服诱惑色一区在线观看 | 视频一区在线视频| 中文字幕在线免费观看视频| 日本视频在线一区| 9国产精品视频| 久久久久久久久久久妇女 | 精品视频亚洲| 国产欧美久久一区二区三区| 日韩在线卡一卡二| 欧美不卡高清| 免费高潮视频95在线观看网站| 国产精品啊啊啊| 日韩高清在线不卡| 伊人精品久久| 蜜臀久久99精品久久一区二区| jizzjizz中国精品麻豆| 久久亚洲黄色| 国产精品任我爽爆在线播放| 中文字幕亚洲影视| 久久xxxx精品视频| 亚洲欧美久久| 一本色道精品久久一区二区三区| 欧美中文一区二区| 亚洲爱爱视频| 日韩精品一卡| 日本精品影院| 中文另类视频| 成人啊v在线| 日韩精品午夜| 午夜欧美巨大性欧美巨大| 国产传媒在线| 国产精品不卡| 国产成人精品一区二区三区免费| 麻豆国产欧美一区二区三区 | 欧美激情福利| 国产精品超碰| 国产激情精品一区二区三区| 国产精品毛片aⅴ一区二区三区|