@DiamondFsd 昨天寫了一篇關於如何在Spring MVC中靈活控制JSON返回的博客,其中@JSON
註解的思路和我在actframework的處理方式很是類似。前端
恰好昨天把actframework放上碼雲了,就這個話題寫下 如何在ActFramework中控制JSON返回java
首先是資源和服務。我將就@DiamondFsd的article的例子來作講解git
@Entity("article") public class Article extends MorphiaAdaptiveRecord<Article> { @UrlContext("article") public static class Service extends MorphiaDao<Article> { @GetAction public Iterable<Article> list() { return findAll(); } @GetAction("{id}") public Article show(String id) { return findById(id); } @PostAction public Article create(Article article) { return save(article); } ... } }
這裏咱們看到能夠經過 POST /article
向服務提交article數據。假設我提交的數據是:json
{ "title": "How to control JSON view in Actframework", "content": "BlahBlah", "author": "Gelin Luo", "language": "Java", "framework": "Actframework", "tags" : [ {"name": "java"}, {"name": "mvc"}, {"name": "json"} ] }
我能夠獲得相似下面的返回:後端
{ "id": "58a6409ab6c6fe2138b67f10", "_created": "17/02/2017 11:15:22 AM", "content": "BlahBlah", "v": 1, "language": "Java", "author": "Gelin Luo", "title": "How to control JSON view in Actframework", "_modified": "17/02/2017 11:15:22 AM", "framework": "Actframework", "tags": [ { "name": "java" }, { "name": "mvc" }, { "name": "json" } ] }
當我發出GET /article
請求時,Article.Service.list()
方法會響應並返回全部的article列表:mvc
[ { "id": "58a6409ab6c6fe2138b67f10", "_created": "17/02/2017 11:15:22 AM", "content": "BlahBlah", "v": 1, "language": "Java", "author": "Gelin Luo", "title": "How to control JSON view in Actframework", "_modified": "17/02/2017 11:15:22 AM", "framework": "Actframework", "tags": [ { "name": "java" }, { "name": "mvc" }, { "name": "json" } ] } ]
那若是我想控制返回列表的數據,讓每項只返回author
和title
,我能夠在list()
方法上面添加註解PropertySpec
:.net
@GetAction @act.util.PropertySpec("author,title") public Iterable<Article> list() { return findAll(); }
而後再發出GET /article
請求,就能夠獲得下面的響應了:code
[ { "author": "Gelin Luo", "title": "How to control JSON view in Actframework" } ]
我能夠在Article.Service.show(String)
方法上採用相似的方法來定義須要返回的字段。有人提到過若是想讓前端向後端在請求中傳遞須要的字段該怎麼辦,下面是Actframework提供的方法:blog
將show(String)
方法作一點改動資源
從
@GetAction("{id}") public Article show(String id) { return findById(id); }
變爲
@GetAction("{id}") public Article show(String id, String fields) { PropertySpec.current.set(fields); return findById(id); }
而後就能夠從前端在請求中加載fields
參數了:
GET /article/58a6409ab6c6fe2138b67f10?fields=-tags,-content,-_created
上面的請求表示從返回JSON結果中去掉tags
, content
,和_created
三個字段
返回結果將會是:
{ "id": "58a6409ab6c6fe2138b67f10", "v": 1, "language": "Java", "author": "Gelin Luo", "title": "How to control JSON view in Actframework", "_modified": "17/02/2017 11:15:22 AM", "framework": "Actframework" }
該博客的完整源碼在碼雲上
ActFramework: https://www.oschina.net/p/actframework