SpringMVC jsonView 注解笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC 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" : "[email protected]",
    "address" : "1 Jaures street",
    "postalCode" : "69003",
    "city" : "Lyon",
    "country" : "France"
  },
  "recipients" : [ {
    "id" : 2,
    "firstname" : "Stéphane",
    "lastname" : "Nicoll",
    "email" : "[email protected]",
    "address" : "42 Obama street",
    "postalCode" : "1000",
    "city" : "Brussel",
    "country" : "Belgium"
  }, {
    "id" : 3,
    "firstname" : "Rossen",
    "lastname" : "Stoyanchev",
    "email" : "[email protected]",
    "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 注解笔记的主要内容,如果未能解决你的问题,请参考以下文章

springmvc学习笔记(11)-springmvc注解开发之简单参数绑定

springmvc学习笔记(13)-springmvc注解开发之集合类型参数绑定

jsonview注解RequestBody 拦截

springMVC学习笔记-----注解和非注解入门小程序

springmvc chrome jsonviewer 一起请求 重复提提交 controller重复执行 2次执行

springmvc学习笔记-入门程序小结