我在很多地方都看到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());
}
}
答案 0 :(得分:1)
首先,让我们明确一点:你可以在Dropwizard资源中做任何你喜欢的事情 - 关于它们没有什么特别的。
关于你是否可以使用“[客户端]进行其他服务”的具体问题(例如另一个Dropwizard服务,或者完全独立的东西),答案是肯定的,这完全没问题。但请注意,如果您没有使用Hibernate访问资源方法中的数据库,则不需要@UnitOfWork
注释(调用该方法时为for declaring that a session & transaction should be managed for you)。
最后,你问“是否可以通过手动转换返回json”。在不知道您正在考虑使用哪个客户端以及在调用其findAll
方法时返回的内容时,回答这个问题有点困难。我可以想到几种可能的情况:
List<String>
)。从那里开始,泽西岛和杰克逊将为您处理将此序列化为JSON并将其放入您的资源的响应中。ObjectMapper
方法中使用Jackson run
- you can grab one from the Dropwizard Environment
)。此时,您可以转换然后返回它们,如上例所示。在任何一种情况下,我都无法想到你为什么要将序列化为 JSON(如你的例子中所示)。这会给你一个String
(不是List<String>
)。除非你正在做一些非常古怪的事情,否则你可能不希望从你的Dropwizard资源返回一个JSON字符串 - 然后再将它作为JSON序列化,然后将导致一个充满JSON的字符串再次被反序列化。另一端!