SpringMVC jsonView 注解笔记
需求:
由于平时会写一些数据返回到前端,然而往往的情况是:
仅仅需要部分的字段属性,所以有时就得做一些操作保证只返回所需要的字段
特别是 针对手机端的接口或者其他走HTTP协议的接口 需要对象内部分属性
方案:
利用@JsonView注解很方便的搞掂这事. 他可以控制输出我们想要序列化的字段属性
且简单易用易懂
publicclassView{interfaceSummary{}}publicclassUser{@JsonView(View.Summary.class)privateLongid;@JsonView(View.Summary.class)privateStringfirstname;@JsonView(View.Summary.class)privateStringlastname;privateStringemail;privateStringaddress;privateStringpostalCode;privateStringcity;privateStringcountry;}publicclassMessage{@JsonView(View.Summary.class)privateLongid;@JsonView(View.Summary.class)privateLocalDatecreated;@JsonView(View.Summary.class)privateStringtitle;@JsonView(View.Summary.class)privateUserauthor;privateList<User>recipients;privateStringbody;}
@RestControllerpublicclassMessageController{@AutowiredprivateMessageServicemessageService;@RequestMapping("/")publicList<Message>getAllMessages(){returnmessageService.getAll();}@RequestMapping("/{id}")publicMessagegetMessage(@PathVariableLongid){returnmessageService.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":"Thisisaninformationmessage","author":{"id":1,"firstname":"Brian","lastname":"Clozel","email":"bclozel@pivotal.io","address":"1Jauresstreet","postalCode":"69003","city":"Lyon","country":"France"},"recipients":[{"id":2,"firstname":"Stéphane","lastname":"Nicoll","email":"snicoll@pivotal.io","address":"42Obamastreet","postalCode":"1000","city":"Brussel","country":"Belgium"},{"id":3,"firstname":"Rossen","lastname":"Stoyanchev","email":"rstoyanchev@pivotal.io","address":"3Warrenstreet","postalCode":"10011","city":"NewYork","country":"USA"}]}
另外 @JsonView注解也是支持继承的
publicclassView{interfaceSummary{}interfaceSummaryWithRecipientsextendsSummary{}}publicclassMessage{@JsonView(View.Summary.class)privateLongid;@JsonView(View.Summary.class)privateLocalDatecreated;@JsonView(View.Summary.class)privateStringtitle;@JsonView(View.Summary.class)privateUserauthor;@JsonView(View.SummaryWithRecipients.class)privateList<User>recipients;privateStringbody;}@RestControllerpublicclassMessageController{@AutowiredprivateMessageServicemessageService;@JsonView(View.SummaryWithRecipients.class)@RequestMapping("/with-recipients")publicList<Message>getAllMessagesWithRecipients(){returnmessageService.getAll();}}
结果中多了recipients属性
{"id":1,"created":"2014-11-14","title":"Info","body":"Thisisaninformationmessage","author":{"id":1,"firstname":"Brian","lastname":"Clozel",},"recipients":[{"id":2,"firstname":"Stéphane","lastname":"Nicoll",},{"id":3,"firstname":"Rossen","lastname":"Stoyanchev",}]}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。