码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC jsonView 注解笔记

时间:2016-12-16 20:06:33      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:@jsonview 笔记

需求:

        由于平时会写一些数据返回到前端,然而往往的情况是:

               仅仅需要部分的字段属性,所以有时就得做一些操作保证只返回所需要的字段

               特别是 针对手机端的接口或者其他走HTTP协议的接口 需要对象内部分属性

方案:

        利用@JsonView注解很方便的搞掂这事. 他可以控制输出我们想要序列化的字段属性

        且简单易用易懂

public class View {
    interface Summary {}	
}


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;
}

public class Message {

	@JsonView(View.Summary.class)
	private Long id;

	@JsonView(View.Summary.class)
	private LocalDate  created;

	@JsonView(View.Summary.class)
	private String title;

	@JsonView(View.Summary.class)
	private User author;

	private List<User> recipients;
  
	private String body;
	
}

@RestController
public class MessageController {

	@Autowired
	private MessageService messageService;

	
	@RequestMapping("/")
	public List<Message> getAllMessages() {
		return messageService.getAll();
	}

	@RequestMapping("/{id}")
	public Message getMessage(@PathVariable Long id) {
		return messageService.get(id);
	}
}

在上面的实例中,只有getAllMessages()这个方法有@JsonView(View.Summary.class)注解,所以它的请求只会出现被注解标注要序列化的字段属性  

        响应的结果:   只会出现被注解的属性

 [ {
  "id" : 1,
  "created" : "2014-11-14",
  "title" : "Info",
  "author" : {
    "id" : 1,
    "firstname" : "Brian",
    "lastname" : "Clozel"
  }}, {
  "id" : 2,
  "created" : "2014-11-14",
  "title" : "Warning",
  "author" : {
    "id" : 2,
    "firstname" : "Stéphane",
    "lastname" : "Nicoll"
  }}, {
  "id" : 3,
  "created" : "2014-11-14",
  "title" : "Alert",
  "author" : {
    "id" : 3,
    "firstname" : "Rossen",
    "lastname" : "Stoyanchev"
  }} ]

而如果调用 getMessage(@PathVariable Long id) 这个方法  则返回的数据结果:

        所有的Message所有的字段属性

{
  "id" : 1,
  "created" : "2014-11-14",
  "title" : "Info",
  "body" : "This is an information message",
  "author" : {
    "id" : 1,
    "firstname" : "Brian",
    "lastname" : "Clozel",
    "email" : "bclozel@pivotal.io",
    "address" : "1 Jaures street",
    "postalCode" : "69003",
    "city" : "Lyon",
    "country" : "France"
  },
  "recipients" : [ {
    "id" : 2,
    "firstname" : "Stéphane",
    "lastname" : "Nicoll",
    "email" : "snicoll@pivotal.io",
    "address" : "42 Obama street",
    "postalCode" : "1000",
    "city" : "Brussel",
    "country" : "Belgium"
  }, {
    "id" : 3,
    "firstname" : "Rossen",
    "lastname" : "Stoyanchev",
    "email" : "rstoyanchev@pivotal.io",
    "address" : "3 Warren street",
    "postalCode" : "10011",
    "city" : "New York",
    "country" : "USA"
  } ]}


另外 @JsonView注解也是支持继承


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

public class Message {

	@JsonView(View.Summary.class)
	private Long id;

	@JsonView(View.Summary.class)
	private LocalDate created;

	@JsonView(View.Summary.class)
	private String title;

	@JsonView(View.Summary.class)
	private User author;

	@JsonView(View.SummaryWithRecipients.class)
	private List<User> recipients;
  
	private String body;
}

@RestController
public class MessageController {

	@Autowired
	private MessageService messageService;

	@JsonView(View.SummaryWithRecipients.class)
	@RequestMapping("/with-recipients")
	public List<Message> getAllMessagesWithRecipients() {
		return messageService.getAll();
	}
}

结果中多了recipients属性


{
  "id" : 1,
  "created" : "2014-11-14",
  "title" : "Info",
  "body" : "This is an information message",
  "author" : {
    "id" : 1,
    "firstname" : "Brian",
    "lastname" : "Clozel",
  },
  "recipients": [ {
    "id" : 2,
    "firstname" : "Stéphane",
    "lastname" : "Nicoll", 
  }, {
    "id" : 3,
    "firstname" : "Rossen",
    "lastname" : "Stoyanchev",
  } ]}



SpringMVC jsonView 注解笔记

标签:@jsonview 笔记

原文地址:http://10229180.blog.51cto.com/10219180/1883396

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!