溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

好程序員Java分享SpringMVC之@ResponseBody注解

發(fā)布時(shí)間:2020-07-22 10:39:07 來源:網(wǎng)絡(luò) 閱讀:329 作者:wx5d42865f47214 欄目:編程語言

好程序員Java分享SpringMVC@ResponseBody注解,本章我們學(xué)習(xí)到SpringMVC服務(wù)器端如何提供數(shù)據(jù)查詢服務(wù),這里需要使用兩個(gè)重要的注解:@ResponseBody@RestController。

@ResponseBody注解

?????在前面使用SpringMVC時(shí),Controller中的方法返回值會通過視圖處理器ViewResolver處理為頁面的URL,然后跳轉(zhuǎn)到對應(yīng)頁面中,如下面例子返回的hello,將轉(zhuǎn)換為/WEB-INF/pages/hello.jsp

  @Controller

  public?class?UserController{

  @RequestMapping(“/login”)

  public?String?login(){

  return?“hello”;

  }

  }

  

??有時(shí)候我們需要用Controller實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)接口,比如:商品查詢、查詢天氣、新聞數(shù)據(jù)等。就不需要進(jìn)行頁面跳轉(zhuǎn)而是直接返回?cái)?shù)據(jù)。

  這時(shí)候我們可以在方法上,添加注解:@ResponseBody

  @Controller

  public?class?UserController{

  @ResponseBody

  @RequestMapping(“/login”)

  public?String?login(){

  return?“hello”;

  }

  }

  

  好程序員Java分享SpringMVC之@ResponseBody注解

  在瀏覽器中直接顯示hello文字,也就是說添加了@ResponseBody注解的方法,返回值會通過HTTP響應(yīng)主體直接發(fā)送給瀏覽器。

?

類型轉(zhuǎn)換器

  默認(rèn)情況下,使用@ResponseBody返回的數(shù)據(jù)只能是String類型,其它類型返回時(shí)會出現(xiàn)異常:

  好程序員Java分享SpringMVC之@ResponseBody注解

  這里提示沒有對應(yīng)的轉(zhuǎn)換器,這里可以添加轉(zhuǎn)換器將數(shù)據(jù)轉(zhuǎn)換為特定的格式,如:xmljson等,JSON是數(shù)據(jù)通信的主要格式,我們將添加一個(gè)JSON格式的轉(zhuǎn)換器。配置方法非常簡單,我們只需要添加jackson-databind依賴:

  <dependency>

  ????<groupId>com.fasterxml.jackson.core</groupId>

  ????<artifactId>jackson-databind</artifactId>

  ????<version>2.8.7</version>

  </dependency>

  

  Jackson庫可以實(shí)現(xiàn)Java對象和JSON的相互轉(zhuǎn)換,引入Jackson-databind依賴后,SpringMVC會自動(dòng)添加Jackson的轉(zhuǎn)換器。

?

轉(zhuǎn)換自定義類型

  接下來我們再進(jìn)行測試,添加方法測試返回boolean數(shù)據(jù)

  ????@ResponseBody

  ????@RequestMapping("/login2")

  ????public?boolean?login2(){

  ????????return?false;

  ????}

  

好程序員Java分享SpringMVC之@ResponseBody注解

  我們進(jìn)行數(shù)據(jù)查詢時(shí),需要返回自定義類型的數(shù)據(jù),如:用戶、商品、訂單、文章等,這里我們測試返回自定義類型:

  public?class?User?{

  ????private?int?id;

  ????private?String?username;

  ????private?String?birthday;

  ????private?String?sex;

  ????private?String?address;

  ??????//添加get\set\構(gòu)造方法

  

  ??????...

  }

  @ResponseBody

  @RequestMapping("/login3")

  public?User?login3(){

  ????User?user?=?new?User(1,?"張三",?"1990-2-1",?"男",?"武漢");

  ????return?user;

  }

  

好程序員Java分享SpringMVC之@ResponseBody注解

  

  可以看到User對象被轉(zhuǎn)換成了JSON格式。再測試對象集合:

  ????@ResponseBody

  ????@RequestMapping("/login4")

  ????public?List<User>?login4(){

  ????????List<User>?users?=?new?ArrayList<>();

  ????????users.add(new?User(1,?"張三",?"1990-2-1",?"男",?"武漢"));

  ????????users.add(new?User(2,?"李四",?"1990-2-1",?"男",?"武漢"));

  ????????users.add(new?User(3,?"王五",?"1990-2-1",?"男",?"武漢"));

  ????????return?users;

  ????}

  

  好程序員Java分享SpringMVC之@ResponseBody注解

  List集合被轉(zhuǎn)換成了JSON數(shù)組,我們從數(shù)據(jù)庫查詢到數(shù)據(jù)后都會放入對應(yīng)的實(shí)體類集合中,然后把集合轉(zhuǎn)換成JSON格式發(fā)送給客戶端,有了@ResponseBody和Jackson轉(zhuǎn)換器可以很容易的實(shí)現(xiàn)。

?

@RestController注解

  如果一個(gè)Controller類主要用于做網(wǎng)絡(luò)服務(wù),所有的方法都需要添加@ResponseBody注解,我們可以在類的前面加上@RestController注解,這個(gè)注解相當(dāng)于@Controller+@ResponseBody,也就是說它既可以用于聲明類為Controller,也可以給所有方法自動(dòng)添加@ResponseBody注解。

  

總結(jié)

  本章我們學(xué)習(xí)了SpringMVC中的@ResponseBody注解,有該注解的方法,可以將數(shù)據(jù)直接返回給客戶端,我們還學(xué)習(xí)了利用Jackson庫提供的轉(zhuǎn)換器,將自定義類型轉(zhuǎn)換為JSON格式,實(shí)際項(xiàng)目中有很多地方需要它們來提供查詢數(shù)據(jù)的服務(wù)。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI