Spring MVC @JsonView使用详解
2015-12-16 15:22
459 查看
Spring 提供了对Jackson 非常好的支持,可以查看此spring-jackson-demo代码来掌握。这里着重说一下
首先我们定义一个
这里也可以将
然后我们定义我们的Bean类:
可以看到,
SpringMVC根据
在Controller中指定
当我们访问
用法是不是很简单?
比如我们需要将User分两个规则进行序列化,一个是“基本资料”,即上面那三个属性的规则;另一个是“详细资料”,除了包含“基本资料”中的三个属性外,另外还要包含几个详细资料
我们在
这里使用了继承,
可以看到,我们对
增加Controller方法,测试:
这样,当我们访问
其实要想实现对属性的排除过滤,Jackson还有一种更简单的方法:
官方文档地址:http://wiki.fasterxml.com/JacksonFeatureJsonFilter
@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指定给了
id、
firstname、
lastname三个属性,这样,当我们使用
@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分两个规则进行序列化,一个是“基本资料”,即上面那三个属性的规则;另一个是“详细资料”,除了包含“基本资料”中的三个属性外,另外还要包含几个详细资料
address。
我们在
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; }
可以看到,我们对
address指定了
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": "brian@163.com", "address": "beijing China" }, { "id" : 2, "firstname" : "Stéphane", "lastname" : "Nicoll", "email": "nicoll@163.com", "address": "beijing China" }, { "id" : 3, "firstname" : "Rossen", "lastname" : "Stoyanchev" , "email": "stoyanchev@163.com", "address": "beijing China" } ]
其实要想实现对属性的排除过滤,Jackson还有一种更简单的方法:
@JsonFilter。
官方文档地址:http://wiki.fasterxml.com/JacksonFeatureJsonFilter
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- XML 与 JSON 优劣对比
- VBA将excel数据表生成JSON文件
- newtonsoft.json解析天气数据出错解决方法
- vbs 解析json jsonp的方法
- Extjs4如何处理后台json数据中日期和时间
- C#实现将类的内容写成JSON格式字符串的方法
- JQuery ajax返回JSON时的处理方式 (三种方式)
- jquery JSON的解析方式示例介绍
- c#版json数据解析示例分享
- ASP JSON类文件的使用方法
- C#实现对Json字符串处理实例
- C#实现Json转Unicode的方法
- php解析json数据实例
- PHP中JSON的应用技巧
- PHP6 先修班 JSON实例代码
- 关于JSON以及JSON在PHP中的应用技巧
- .Net中的json操作类用法分析