限制JSON响应的字段
我正在使用Phoenix框架和图书馆。 目前我正在开发一个RESTAPI。现在,我需要用两种不同的方式对模型限制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" }, /
进行编码
在仅包含基本信息的所有书籍的列表中(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))