如何在Act中控制JSON返回对象的字段

    首先创建一个Article类,以及对该资源的RESTful服务接口:

    这里我们看到可以通过 POST /article向服务提交article数据。假设我提交的数据是:

    1. {
    2. "title": "How to control JSON view in Actframework",
    3. "content": "BlahBlah",
    4. "author": "Gelin Luo",
    5. "language": "Java",
    6. "framework": "Actframework",
    7. "tags" : [
    8. {"name": "java"},
    9. {"name": "mvc"},
    10. {"name": "json"}
    11. ]
    12. }

    我可以得到类似下面的返回:

    1. {
    2. "id": "58a6409ab6c6fe2138b67f10",
    3. "_created": "17/02/2017 11:15:22 AM",
    4. "content": "BlahBlah",
    5. "language": "Java",
    6. "author": "Gelin Luo",
    7. "_modified": "17/02/2017 11:15:22 AM",
    8. "framework": "Actframework",
    9. "tags": [
    10. {
    11. "name": "java"
    12. },
    13. {
    14. "name": "mvc"
    15. },
    16. {
    17. "name": "json"
    18. }
    19. ]

    当我发出GET /article请求时,Article.Service.list()方法会响应并返回所有的article列表:

    1. @GetAction
    2. public Iterable<Article> list() {
    3. return findAll();
    4. }

    然后再发出GET /article请求,就可以得到下面的响应了:

    1. [
    2. {
    3. "author": "Gelin Luo",
    4. "title": "How to control JSON view in Actframework"
    5. }
    6. ]

    我可以在Article.Service.show(String)方法上采用类似的方法来定义需要返回的字段。有人提到过如果想让前端向后端在请求中传递需要的字段该怎么办,下面是Actframework提供的方法:

    show(String)方法做一点改动

    1. @GetAction("{id}")
    2. public Article show(String id, String fields) {
    3. PropertySpec.current.set(fields);
    4. return findById(id);
    5. }

    然后就可以从前端在请求中加载fields参数了:

      上面的请求表示从返回JSON结果中去掉tags, content,和三个字段

      返回结果将会是:

      该博客的源码在码云上: