亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2020年09月23日 09:28:16   作者:柒  
這篇文章主要介紹了Spring mvc Json處理實(shí)現(xiàn)流程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

接收J(rèn)SON

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

@RequestMapping("/addbook2")
@ResponseBody
public 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")
@ResponseBody
public 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")
@ResponseBody
public 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")
@ResponseBody
public 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")
@ResponseBody
public 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 class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" 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 class="org.springframework.http.converter.json.GsonHttpMessageConverter" id="httpMessageConverter">
  <property name="gson">
    <bean class="com.google.gson.Gson" factory-bean="gsonBuilder" factory-method="create"/>
  </property>
</bean>
<bean class="com.google.gson.GsonBuilder" 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 class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter" 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 class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter" 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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • uploadify java實(shí)現(xiàn)多文件上傳和預(yù)覽

    uploadify java實(shí)現(xiàn)多文件上傳和預(yù)覽

    這篇文章主要為大家詳細(xì)介紹了java結(jié)合uploadify實(shí)現(xiàn)多文件上傳和預(yù)覽的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Java?NIO中四大核心組件的使用詳解

    Java?NIO中四大核心組件的使用詳解

    Java?NIO(New?IO)是Java?1.4版本中引入的一套全新的IO處理機(jī)制,而NIO提供了四個(gè)核心組件:Channel、Buffer、Selector和SelectionKey,本文就來簡單講講這四大組件的使用吧
    2023-05-05
  • Mybatis 中Mapper使用package方式配置報(bào)錯(cuò)的解決方案

    Mybatis 中Mapper使用package方式配置報(bào)錯(cuò)的解決方案

    這篇文章主要介紹了Mybatis 中Mapper使用package方式配置報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java字符串的重要使用方法以及實(shí)例

    java字符串的重要使用方法以及實(shí)例

    在本篇文章里小編給大家整理了關(guān)于java字符串的重要使用方法以及實(shí)例代碼,需要的朋友們可以跟著學(xué)習(xí)參考下。
    2019-03-03
  • IDEA快速部署Spring?Boot?項(xiàng)目到Docker的實(shí)現(xiàn)方法

    IDEA快速部署Spring?Boot?項(xiàng)目到Docker的實(shí)現(xiàn)方法

    本文主要介紹了IDEA快速部署Spring?Boot?項(xiàng)目到Docker的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼)

    java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼)

    這篇文章主要介紹了java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java正則表達(dá)式判斷字符串中是否包含中文示例

    Java正則表達(dá)式判斷字符串中是否包含中文示例

    之前一個(gè)朋友問我,如何判斷字符串中是否包含中文,其實(shí)解決的方法很簡單,但覺著有必要寫出給不知道的朋友們以參考,所以下面這篇文章主要介紹了利用Java正則表達(dá)式判斷字符串中是否包含中文的方法,需要的朋友可以參考。
    2017-03-03
  • 詳解springboot配置多個(gè)redis連接

    詳解springboot配置多個(gè)redis連接

    Spring Boot為Redis, MongoDB, Elasticsearch, Solr和Gemfire提供自動(dòng)配置。本文詳細(xì)介紹了springboot配置多個(gè)redis連接,有興趣的可以了解一下。
    2017-04-04
  • AsyncConfigurerSupport自定義異步線程池處理異常

    AsyncConfigurerSupport自定義異步線程池處理異常

    這篇文章主要為大家介紹了AsyncConfigurerSupport自定義異步線程池處理異常詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Spring Boot + Mybatis多數(shù)據(jù)源和動(dòng)態(tài)數(shù)據(jù)源配置方法

    Spring Boot + Mybatis多數(shù)據(jù)源和動(dòng)態(tài)數(shù)據(jù)源配置方法

    最近做項(xiàng)目遇到這樣的應(yīng)用場景,項(xiàng)目需要同時(shí)連接兩個(gè)不同的數(shù)據(jù)庫A, B,并且它們都為主從架構(gòu),一臺(tái)寫庫,多臺(tái)讀庫。下面小編給大家?guī)砹薙pring Boot + Mybatis多數(shù)據(jù)源和動(dòng)態(tài)數(shù)據(jù)源配置方法,需要的朋友參考下吧
    2018-01-01

最新評(píng)論