1. 程式人生 > >Spring MVC @JsonView使用詳解

Spring MVC @JsonView使用詳解

Spring 提供了對Jackson 非常好的支援,可以檢視此spring-jackson-demo程式碼來掌握。這裡著重說一下@JsonView的用法

JSON Views 基本用法

@JsonView可以過濾序列化物件的欄位屬性,可以使你有選擇的序列化物件。下面看一個例子:
首先我們定義一個View類,裡面包含我們對“要序列化的欄位”的定義,我們暫時歸為Summary(摘要)。屬於Summary的欄位都是我們要序列化的欄位。

這裡也可以將View類理解為一組“標識”,而Summary就是其中的一個“標識”。

public class View {
   interface Summary {}
}

View類的定義很簡單。

然後我們定義我們的Bean類:User

public class User { 
  @JsonView(View.Summary.class) 
  private Long id; 
  @JsonView(View.Summary.class) 
  private String firstname; 
  @JsonView(View.Summary.class) 
  private String lastname; 
  private String email; 
  private String address; 
  private String postalCode; 
  private
String city; private String country; }

可以看到,@JsonView使用很簡單,加在屬性上,指定一個“標識”就好了。上面例子我們將Summary指定給了idfirstnamelastname三個屬性,這樣,當我們使用@JsonView序列化User物件的時候,就只會序列化這三個屬性,可以隱藏一些不想序列化的欄位屬性。
SpringMVC根據@JsonView序列化的方法如下:

@RestController
public class UserRestController{
  @Autowired 
  private UserService userService;

  @RequestMapping
("/user") @JsonView(View.Summary.class) public List<User> getUsers(){ return userService.listUsers(); } }

在Controller中指定JsonVIew即可。
當我們訪問/user時,會得到如下結果:

[
  { "id" : 1, "firstname" : "Brian", "lastname" : "Clozel" },
  { "id" : 2, "firstname" : "Stéphane", "lastname" : "Nicoll" },
  { "id" : 3, "firstname" : "Rossen", "lastname" : "Stoyanchev" }
]

用法是不是很簡單?

JSON Views 繼承用法

JsonView 同時還支援繼承
比如我們需要將User分兩個規則進行序列化,一個是“基本資料”,即上面那三個屬性的規則;另一個是“詳細資料”,除了包含“基本資料”中的三個屬性外,另外還要包含幾個詳細資料emailaddress

我們在View中再加一個“標識”SummaryWithDetail,定義如下:

public class View {
  interface Summary {}
  interface SummaryWithDetail extends Summary{}
}

這裡使用了繼承,SummaryWithDetail繼承了Summary,也就是說,當我們以SummaryWithDetail的方式進行物件序列化時,出來的屬性同時也包含Summary指定的屬性。我們在User中指定SummaryWithDetail:

public class User { 
  @JsonView(View.Summary.class) 
  private Long id; 
  @JsonView(View.Summary.class) 
  private String firstname; 
  @JsonView(View.Summary.class) 
  private String lastname; 

  @JsonView(View.SummaryWithDetail .class) 
  private String email; 
  @JsonView(View.SummaryWithDetail .class) 
  private String address; 

  private String postalCode; 
  private String city; 
  private String country;
}

可以看到,我們對emailaddress指定了SummaryWithDetail標識。

增加Controller方法,測試:

@RestController
public class UserRestController{
  @Autowired 
  private UserService userService;

  @RequestMapping("/user")
  @JsonView(View.Summary.class) 
  public List<User> getUsers(){
    return userService.listUsers();
  }

  @RequestMapping("/user-with-detail")
  @JsonView(View.Summary.class) 
  public List<User> getUsersWithDetail(){
    return userService.listUsers();
  }
}

這樣,當我們訪問/user-with-detail時,會得到如下結果:

[
  { 
    "id" : 1, 
    "firstname" : "Brian", 
    "lastname" : "Clozel", 
    "email": "[email protected]", 
    "address": "beijing China" 
  },
  { 
    "id" : 2, 
    "firstname" : "Stéphane", 
    "lastname" : "Nicoll", 
    "email": "[email protected]", 
    "address": "beijing China" 
   },
  { 
    "id" : 3, 
    "firstname" : "Rossen", 
    "lastname" : "Stoyanchev" , 
    "email": "[email protected]", 
    "address": "beijing China" 
  }
]

相關推薦

spring mvc 配置

app stl set方法 參數類型 utf-8 admin pathvaria 方案 -m 現在主流的Web MVC框架除了Struts這個主力 外,其次就是Spring MVC了,因此這也是作為一名程序員需要掌握的主流框架,框架選擇多了,應對多變的需求和業務時,可實行的

Spring MVC配置

來源:https://www.cnblogs.com/superjt/p/3309255.html 現在主流的Web MVC框架除了Struts這個主力 外,其次就是Spring MVC了,因此這也是作為一名程式設計師需要掌握的主流框架,框架選擇多了,應對多變的需求

Spring MVC DispatcherServlet

DispatcherServlet作用 DispatcherServlet是前端控制器設計模式的實現,提供Spring Web MVC的集中訪問點,而且負責職責的分派,而且與Spring IoC容器無縫整合,從而可以獲得Spring的所有好處。 Dispat

spring MVC 註解以及說明

基於註釋(Annotation)的配置有越來越流行的趨勢,Spring 2.5 順應這種趨勢,提供了完全基於註釋配置 Bean、裝配 Bean 的功能,您可以使用基於註釋的 Spring IoC 替換原來基於 XML 的配置。本文通過例項詳細講述了 Spring 2.5 基

Spring MVC @ModelAttribute

[email protected]註釋void返回值的方法@Controller public class HelloModelController { @ModelAttr

spring mvc DispatcherServlet之前傳---FrameworkServlet

做專案時碰到Controller不能使用aop進行攔截,從網上搜索得知:使用spring mvc 啟動了兩個context:applicationContext 和WebapplicationContext。 首先我們來了解applicationContext 和WebapplicationContext區

spring mvc DispatcherServlet之interceptor和filter的區別

首先我們看一下spring mvc Interceptor的功能及實現: http://wenku.baidu.com/link?url=Mw3GaUhCRMhUFjU8iIDhObQpDcbmmRy_IPeumazg0ppnbmwqFUtLp9kSpuPPpeysf6EnHBLYFeWrbjqMq8BlW

Spring MVC @JsonView使用

Spring 提供了對Jackson 非常好的支援,可以檢視此spring-jackson-demo程式碼來掌握。這裡著重說一下@JsonView的用法 JSON Views 基本用法 @Jso

Spring基本功能

tex factor oid out 負責 sch bsp 初始化 pub 一、SpringIOC   Spring的控制反轉:把對象的創建,初始化,銷毀的過程交給SpringIOC容器來做,由Spring容器控制對象的生命周期。   1.1 啟動Spring容器的方式:

純幹貨,Spring-data-jpa(轉)

數據庫表結構 attribute 類型 n+1 asq sep pointcut 如何 odin 本篇進行Spring-data-jpa的介紹,幾乎涵蓋該框架的所有方面,在日常的開發當中,基本上能滿足所有需求。這裏不講解JPA和Spring-data-jpa單獨使用,所有的

java利用myeclipse自帶三大框架搭建三大框架(Hibernate+Struts2+Spring)過程

sun 過程 9.png att alt 分享圖片 struts apach sch 搭建過程因人而異,我的搭建過程大致是這樣的:   1.創建一個javaweb項目;   2.導入Spring框架,上圖:     2.1:     2.2:     2.3:   3.

Spring框架Aop

urn 項目 aop mil execution 有一個 dal 例如 cati 一.前言 在以前的項目中,很少去關註spring aop的具體實現與理論,只是簡單了解了一下什麽是aop具體怎麽用,看到了一篇博文寫得還不錯,就轉載來學習一下,博文地址:http://

Spring ioc 常用

rand 通過 prototype epo 外部文件 連接 text efault per [TOC] Spring容器 配置對象時默認的單例的 可以設置bean的scope屬性 singleton 單例模式,只會在IOC容器初始化的時候創建bean,並且只會創建一次 p

Spring Framework啟動

service 控制 ice trap pri pos warn 層次結構 initial 之前一直對Spring啟動的過程很迷糊,所以這次國慶梳理一下。 Spring啟動一言以蔽之:創建一個根應用上下文。(因為其他的所有的應用上下文都可以通過各種方式繼承它) (一)了

SpringBoot進擊 | 二淺出:Spring Boot配置

1.前言 上一節:SpringBoot進擊 | 一淺出:Spring Boot簡單快速上手書 上一篇介紹了 Spring Boot 的入門,在一般情況下,我們不需要做太多的配置就能夠讓 Spring Boot 正常執行。因為其使用“習慣優於配置”(專案中存在大量的配置,此外還內建了一

spring配置檔案--真的蠻詳細

  spring配置檔案詳解--真的蠻詳細 轉自: http://book.51cto.com/art/201004/193743.htm 此處詳細的為我們講解了spring2.5的實現原理,感覺非常有用

Java Web自定義MVC框架

分享一個大神的人工智慧教程!http://blog.csdn.net/jiangjunshow 最近給學生講Java Web,希望他們能夠在學完這部分內容後自己實現一個MVC框架。但是突然發現百度上能搜尋到的靠譜的資料並不是很多,有些只是原理沒有程式碼實現,有些有程式碼實現但是

Spring Security 入門

Spring Security 入門詳解   1.Spring Security介紹 Spring Security是基於spring的應用程式提供宣告式安全保護的安全性框架,它提供了完整的安全性解決方案,能夠在web請求級別和方法呼叫級別 處理身份證驗證和授權.它充分使用了依

Spring-data-jpa

本篇進行Spring-data-jpa的介紹,幾乎涵蓋該框架的所有方面,在日常的開發當中,基本上能滿足所有需求。這裡不講解JPA和Spring-data-jpa單獨使用,所有的內容都是在和Spring整合的環境中實現。如果需要了解該框架的入門,百度一下,很多入門的介紹。在這篇文章的接下來一篇,會有一

Spring AOP配置

<aop:aspectj-autoproxy />的作用 通過配置織入@Aspectj切面 雖然可以通過程式設計的方式織入切面,但是一般情況下,我們還是使用spring的配置自動完成建立代理織入切面的工作。 通過aop名稱空間的<aop:aspectj-autoprox