json - 使用 foreach Play Framework .json 模板列表对象?

标签 json templates foreach playframework

我的问题是:我不想在 json 响应中返回整个模型对象结构和数据。 renderJSON() 在响应中返回模型中的所有内容。

所以我认为最好的方法是使用 *.json 模板。好的,现在我有一个列表,但我现在不知道 *.json 模板中的语法必须如何。

Controller 部分:

List<User> users = User.find("byActive", true).fetch();
if (users != null) {
    render(users);
}

“用户/showAll.json”(模板):

//something like foreach( User currentUser in users )
{
    "username": "${currentUser.name}",
    "userdescr": "${currentUser.description}"
}

对于单个用户,这没问题,我明白了,但是对于 json 模板中的用户列表,它看起来如何?

最佳答案

在不使用 .json 模板的情况下,您的问题还有另一种解决方案。

“renderJSON()”有一个以 JsonSerializer 作为参数的变体,因此您可以定义自己的实现 JsonSerializer 的序列化程序,并决定在响应中发送模型对象的哪一部分。然后您可以调用 renderJSON() 以在 Controller 中返回 JSON 对象。

例子:

public class UserSerializer implements JsonSerializer<User> {

    public JsonElement serialize(User src, Type typeOfSrc, JsonSerializationContext context) {
        Gson gson = new GsonBuilder()
            .setExclusionStrategies(new LocalExclusionStrategy()).create();
        return gson.toJsonTree(src);
    }   

    public static class LocalExclusionStrategy implements ExclusionStrategy {
        public boolean shouldSkipClass(Class<?> clazz) {
            return false;
        }   

        public boolean shouldSkipField(FieldAttributes f) {
            // add exlusion rules here:
            // exclude all fields whose name is not "name" or "description" 
            return !f.getName().toLowerCase().equals("name")
                && !f.getName().toLowerCase().equals("description");
        }   
    }   
}

在你的 Controller 中:

List<User> users = User.find("byActive", true).fetch();
renderJSON(users, new UserSerializer());

Play 框架利用 Google 的 GSON 库进行 json 序列化/反序列化 您可以找到 GSON 的更多信息 here

关于json - 使用 foreach Play Framework .json 模板列表对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9040060/

相关文章:

json - Logstash:从数组到字符串的 XML 到 JSON 输出

java - 在java/Android中解析JSON

c++ - 使用模板类特化消除代码冗余的标准方法是什么?

php - 通知: Undefined offset: 1 in line 23

javascript - 在 Blade foreach 循环中使用 JS 动态更改 div CSS 背景

c# - 带有 where 子句的 foreach 循环

json - 为什么 postman 中显示 "The field is required",即使它可以为空?

ios - 如何搜索 JSON 文件?

java - 如何在 Eclipse 中包含 Javascript 文件以解决 HTML/JSP 文件中的 Javascript 警告?

templates - 如何仅在 Chef 中从 erb 文件转换为我的配置文件?