gpt4 book ai didi

json - Dropwizard 良好实践

转载 作者:搜寻专家 更新时间:2023-10-30 23:43:00 24 4
gpt4 key购买 nike

我在很多地方看到,dropwizard 项目中的资源类有 GET 和 POST 方法。这些方法然后使用 DAO 从数据库访问数据并返回一个 json

public class DropwizardResource {

private DropwizardDAO ddao;

public DropwizardResource (DropwizardDAO ddao) {
this.ddao = ddao;
}

@GET
@Timed
@UnitOfWork
public List<String> getAllResources() {
return ddao.findAll();
}
}

是否建议使用其他客户端为其他服务初始化资源,然后通过手动转换返回 json?

public class DropwizardResource {

private NonDbClient client;

public DropwizardResource (NonDbClient client) {
this.client = client;
}

@GET
@Timed
@UnitOfWork
public List<String> getAllResources() {
return toJson(client.findAll());
}
}

最佳答案

首先,让我们明确一点:您可以在 Dropwizard 资源中做任何您想做的事——它们本身并没有什么特别之处。

关于您是否可以将“[客户端]用于某些其他服务”(例如,另一个 Dropwizard 服务,或完全独立的服务)的具体问题,答案是肯定的,这完全没问题。但是请注意,如果您不使用 Hibernate 在资源方法中访问数据库,则不需要 @UnitOfWork注释(调用该方法时为 for declaring that a session & transaction should be managed for you)。

最后你问“然后手动转换返回的json”行不行?在不知道您正在考虑使用哪个客户端以及调用其 findAll 时返回的内容的情况下,很难回答这个问题。方法。我可以想到几个可能的场景:

  1. 您从客户端返回反序列化的普通旧 Java 对象(无论它们在传输过程中是如何序列化的 - JSON、XML、疯狂的专有二进制协议(protocol),等等)。在这种情况下,您只需要将它们转换为您想要从 Dropwizard 资源方法返回的任何对象(在您的示例中为 List<String>)。从那里开始,Jersey 和 Jackson 将为您处理将其序列化为 JSON 并将其放入您资源的响应中。
  2. 您从客户端返回一个包含 JSON 的字符串。在这种情况下,您需要手动将 JSON 反序列化为 Java 对象(在应用程序的 ObjectMapper 方法中使用 Jackson Environment - you can grab one from the Dropwizard run )。那时你可以像上面的例子那样转换然后返回它们。

无论哪种情况,我都想不出您为什么要将 序列化为 JSON(如您的示例所示)。那会给你一个 String (不是 List<String> )。除非你在做一些非常古怪的事情,否则你可能不想从你的 Dropwizard 资源中返回一个 JSON 字符串——然后它会再次将它序列化为 JSON,然后会导致一个充满 JSON 的字符串在另一端!

关于json - Dropwizard 良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32769442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com