Java 重头戏2:交付JSON内容的最佳方式

Java 重头戏2:交付JSON内容的最佳方式,java,json,rest,playframework,playframework-2.0,Java,Json,Rest,Playframework,Playframework 2.0,假设我有类似REST的端点,它们返回JSON数据,例如从Java Play应用程序中的模型返回数据。我找到了两种创建JSON输出的方法: 使用类似于HTML模板的JSON模板。它可能是这样的: { "name": "${user.name}", "id": "${user.id}", . . . } 我喜欢它的灵活性。我可以轻松地围绕数据(元数据、状态消息等)构建一个包装器。我可以很容易地影响交付的内容(密码字段、上次登录的时间戳等内容当然不需要向客户端显示)。当然,为了获得有效

假设我有类似REST的端点,它们返回JSON数据,例如从Java Play应用程序中的模型返回数据。我找到了两种创建JSON输出的方法:

  • 使用类似于HTML模板的JSON模板。它可能是这样的:

    {
      "name": "${user.name}",
      "id": "${user.id}",
      . . . 
    }
    
    我喜欢它的灵活性。我可以轻松地围绕数据(元数据、状态消息等)构建一个包装器。我可以很容易地影响交付的内容(密码字段、上次登录的时间戳等内容当然不需要向客户端显示)。当然,为了获得有效的JSON,需要正确转义模板变量的内容。最好的方法是什么

  • 第二种方法是将模型的POJO直接序列化为JSON。当然,这是更快,可以用更少的努力。与模板方法相比,它可能更可靠,因为它是一个自动过程。但是:如何排除密码和元数据字段等数据?我应该用jackson实现构造一个只包含相关数据的新JSON对象吗?或者我必须为每个模型类创建一个“json模型”,并在序列化之前将每个请求上的真实模型转换为json模型吗


  • 就个人而言,我喜欢模板方法,因为它具有灵活性。但有些人会说,永远不要手动构造JSON、XML等。但在这种情况下,这真的是个问题吗?您有什么建议?

    假设您使用的是Java,Jackson允许您排除使用注释的字段。看:

    哦,忘了提了,是的,Java。