@JsonView的用法


声明:本文转载自https://my.oschina.net/u/3637243/blog/1789932,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

    我们来描述一个这样的业务需求,首先有两个URL,/A:为获取用户详情信息包含用户的所有字段(用户名,密码),/B:为获取用户信息字段(只要用户名),怎么处理呢?可能会想到建一个USER类然后返回不同的属性。但是这样写法确实Low的一逼。@JsonView可以十分方便的解决以上问题。下面我来介绍一下@JsonView。

     @JsonView是jackson json中的一个注解,Spring mvc同样支持这个注解,它的作用就是控制输入输出后的json。

一、 @JsonView的使用步骤

    1、使用接口声明多个视图

    2、在对象属性的get方法上指定视图 

import org.hibernate.validator.constraints.NotBlank; import com.fasterxml.jackson.annotation.JsonView;  public class User { 	 	//声明一般视图接口 只允许这个视图返回用户名属性 	public interface UserSimpView{}; 	//声明完整视图接口 允许返回用户名密码属性 由于集成了一般视图接口  含义是拥有了一般视图所具有的返回属性 	public interface UserDetailView extends UserSimpView{}; 	 	private Integer Id; 	 	private String userName; 	 	private String passWord;  	public User() { 	}  	public User(Integer Id, String userName, String passWord) { 		this.Id = Id; 		this.userName = userName; 		this.passWord = passWord; 	} 	 	@JsonView(UserSimpView.class) 	public Integer getId() { 		return Id; 	}  	public void setId(Integer id) { 		Id = id; 	}  	@JsonView(UserSimpView.class) 	public String getUserName() { 		return userName; 	}  	public void setUserName(String userName) { 		this.userName = userName; 	} 	@JsonView(UserDetailView.class) 	public String getPassWord() { 		return passWord; 	}  	public void setPassWord(String passWord) { 		this.passWord = passWord; 	}  	@Override 	public String toString() { 		return "User [Id=" + Id + ", userName=" + userName + ", passWord=" + passWord + "]"; 	} } 

    3、在controller上指定视图

@RestController @RequestMapping("/user") public class UserController { 	 	@GetMapping(produces="application/json;charset=UTF-8") 	@JsonView(UserDetailView.class) 	public List getUserAll(@RequestParam("token") String token){  		List<User> userList = new ArrayList<>(); 		userList.add(new User(1,"二十岁以后特殊视图0","123456特殊视图")); 		userList.add(new User(2,"二十岁以后特殊视图1","qweqwe特殊视图")); 		userList.add(new User(3,"二十岁以后特殊视图2","asdgdd特殊视图"));  		return userList; 	}

二、 编写测试类

    当我使用完整视图的情况下

@RestController @RequestMapping("/user") public class UserController { 	 	@GetMapping(produces="application/json;charset=UTF-8") 	@JsonView(UserDetailView.class) 	public List getUserAll(@RequestParam("token") String token){  		List<User> userList = new ArrayList<>(); 		userList.add(new User(1,"二十岁以后特殊视图0","123456完整视图")); 		userList.add(new User(2,"二十岁以后特殊视图1","qweqwe完整视图")); 		userList.add(new User(3,"二十岁以后特殊视图2","asdgdd完整视图"));  		return userList; 	}

返回结果为:

当我使用特殊视图的情况下

@RestController @RequestMapping("/user") public class UserController { 	 	@GetMapping(produces="application/json;charset=UTF-8") 	@JsonView(UserSimpView.class) 	public List getUserAll(@RequestParam("token") String token){  		List<User> userList = new ArrayList<>(); 		userList.add(new User(1,"二十岁以后特殊视图0","123456完整视图")); 		userList.add(new User(2,"二十岁以后特殊视图1","qweqwe完整视图")); 		userList.add(new User(3,"二十岁以后特殊视图2","asdgdd完整视图"));  		return userList; 	}

返回结果为:

本文发表于2018年04月05日 22:38
(c)注:本文转载自https://my.oschina.net/u/3637243/blog/1789932,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2429 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1