Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
限制JSON响应的字段_Json_Elixir_Phoenix Framework - Fatal编程技术网

限制JSON响应的字段

限制JSON响应的字段,json,elixir,phoenix-framework,Json,Elixir,Phoenix Framework,我正在使用Phoenix框架和图书馆。 目前我正在开发一个RESTAPI。现在,我需要用两种不同的方式对模型进行编码 在仅包含基本信息的所有书籍的列表中(GET/books) 在包含所有信息的详细视图中(GET/book/1) GET/books { "books": [ { "id": 1, "name": "Book one" }, { "id": 2, "name": "Book two" }, /

我正在使用Phoenix框架和图书馆。 目前我正在开发一个RESTAPI。现在,我需要用两种不同的方式对模型
进行编码

  • 在仅包含基本信息的所有书籍的列表中(
    GET/books
  • 在包含所有信息的详细视图中(
    GET/book/1
  • GET/books

    {
      "books": [
        {
          "id": 1,
          "name": "Book one"
        },
        {
          "id": 2,
          "name": "Book two"
        },
        // ...
      ]
    }
    
    {
      "book": {
         "id": 1,
         "name": "Book one",
         "description": "This is book one.",
         "author": "Max Mustermann",
        // ...
      }
    }
    
    defimpl Poison.Encoder, for: MyProject.Book do
    
      @attributes [:id, :name, :description, :author]
    
      def encode(project, _options) do
        project
        |> Map.take(@attributes)
        |> Poison.encode!
      end
    end
    
    GET/books/1

    {
      "books": [
        {
          "id": 1,
          "name": "Book one"
        },
        {
          "id": 2,
          "name": "Book two"
        },
        // ...
      ]
    }
    
    {
      "book": {
         "id": 1,
         "name": "Book one",
         "description": "This is book one.",
         "author": "Max Mustermann",
        // ...
      }
    }
    
    defimpl Poison.Encoder, for: MyProject.Book do
    
      @attributes [:id, :name, :description, :author]
    
      def encode(project, _options) do
        project
        |> Map.take(@attributes)
        |> Poison.encode!
      end
    end
    
    书籍的编码器

    {
      "books": [
        {
          "id": 1,
          "name": "Book one"
        },
        {
          "id": 2,
          "name": "Book two"
        },
        // ...
      ]
    }
    
    {
      "book": {
         "id": 1,
         "name": "Book one",
         "description": "This is book one.",
         "author": "Max Mustermann",
        // ...
      }
    }
    
    defimpl Poison.Encoder, for: MyProject.Book do
    
      @attributes [:id, :name, :description, :author]
    
      def encode(project, _options) do
        project
        |> Map.take(@attributes)
        |> Poison.encode!
      end
    end
    
    代码段控制器

    def index(conn, _params) do
      books = Repo.all(Book)
      json(conn, %{books: books})
    end
    
    如何限制字段?我搜索一个选项,如
    :only
    :exclude
    。 有人遇到过这个问题吗

    谢谢你的帮助

    您可以使用和:

    请注意,赋值(render的第二个参数)中的名称由模块决定。有关使用其他名称的示例,请参见

    然后,您可以使用以下命令从控制器调用此命令:

    render(conn, "index.json", books: Repo.all(Book))
    
    render(conn, "show.json", book: Repo.get(Book, 1))