电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:94日期: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è)對(duì)象:

@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>

依賴添加成功后,凡是在接口中直接返回的對(duì)象,集合等等,都會(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è)對(duì)象,但是在前端接收到的則是一個(gè) JSON 字符串,這個(gè)對(duì)象會(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)換器,它提供了兩方面的功能:

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

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

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

MappingJackson2HttpMessageConverter。

舉一個(gè)簡單的應(yīng)用場(chǎ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)行測(cè)試,結(jié)果如下:

gson

gson 是 Google 推出的一個(gè) JSON 解析器,主要在 Android 開發(fā)中使用較多,不過,Web 開發(fā)中也是支持這個(gè)的,而且 SpringMVC 還針對(duì) Gson 提供了相關(guān)的自動(dòng)化配置,以致我們?cè)陧?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 并沒針對(duì) 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 中,對(duì) jackson 和 gson 都提供了相應(yīng)的支持,就是如果使用這兩個(gè)作為 JSON 轉(zhuǎn)換器,只需要添加對(duì)應(yīng)的依賴就可以了,返回的對(duì)象和返回的集合、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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 六自由度平台_六自由度运动平台_三自由度摇摆台—南京全控科技 | 雾度仪_雾度计_透光率雾度仪价格-三恩时(3nh)光电雾度仪厂家 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 手术示教系统-数字化手术室系统-林之硕医疗云智能视频平台 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 杭州|上海贴标机-百科 | 维泰克Veertek-锂电池微短路检测_锂电池腐蚀检测_锂电池漏液检测 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 中药超微粉碎机(中药细胞级微粉碎)-百科| 钢制暖气片散热器_天津钢制暖气片_卡麦罗散热器厂家 | 玻璃钢型材_拉挤模具_玻璃钢拉挤设备——滑县康百思 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 杭州荣奥家具有限公司-浙江办公家具,杭州办公家具厂 | 冷水机,风冷冷水机,水冷冷水机,螺杆冷水机专业制造商-上海祝松机械有限公司 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 2025福建平潭岛旅游攻略|蓝眼泪,景点,住宿攻略-趣平潭网 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 开云(中国)Kaiyun·官方网站 - 登录入口 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | 工控机,嵌入式主板,工业主板,arm主板,图像采集卡,poe网卡,朗锐智科 | 闪蒸干燥机-喷雾干燥机-带式干燥机-桨叶干燥机-[常州佳一干燥设备] | 仓储笼_金属箱租赁_循环包装_铁网箱_蝴蝶笼租赁_酷龙仓储笼租赁 测试治具|过炉治具|过锡炉治具|工装夹具|测试夹具|允睿自动化设备 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 土壤有机碳消解器-石油|表层油类分析采水器-青岛溯源环保设备有限公司 | 合肥风管加工厂-安徽螺旋/不锈钢风管-通风管道加工厂家-安徽风之范 | 【化妆品备案】进口化妆品备案流程-深圳美尚美化妆品有限公司 | 不锈钢酒柜|恒温酒柜|酒柜定制|酒窖定制-上海啸瑞实业有限公司 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 许昌奥仕达自动化设备有限公司 | 中国玩具展_玩具展|幼教用品展|幼教展|幼教装备展 | [品牌官网]贵州遵义双宁口腔连锁_贵州遵义牙科医院哪家好_种植牙_牙齿矫正_原华美口腔 | 上海网站建设-上海网站制作-上海网站设计-上海做网站公司-咏熠软件 |