我有一个简单的Dropwizard休息服务应用程序,它只有两层:控制器层(又名资源)和持久层(又名 dao)。Dropwizard 应用程序小巧简洁,运行顺畅。
但是,在一些需求发生变化之后,我需要添加一些业务逻辑来处理传入的 json 对象,然后将其持久化到数据库中。因此,我正在寻找在控制器和持久层之间添加此服务层的最佳方法。
您能否建议在应用程序中添加服务层的最佳方法。谢谢。
控制器(又名资源):
@Path("/person")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public class PersonResource {
private PersonService personService;
public PersonResource(PersonService personService) {
this.personService = personService;
}
@GET
public List<Person> getAll(){
return personService.getAll();
}
@GET
@Path("/{id}")
public Person findById(@PathParam("id") Integer id){
return personService.findPersonById(id);
}
}
服务层:
public class PersonService {
private PersonDAO personDAO;
public PersonService(PersonDAO personDAO) {
this.personDAO = personDAO;
}
@UnitOfWork
public List<Person> getAll(){
return personDAO.getAll();
}
@UnitOfWork
public Person findPersonById(Integer id){
return personDAO.findById(id);
}
}
应用类:
public class DemoApplication extends Application<DemoConfiguration> {
public static void main(final String[] args) throws Exception {
new DemoApplication().run(args);
}
private final HibernateBundle<DemoConfiguration> hibernateBundle = new HibernateBundle<DemoConfiguration>(Person.class) {
@Override
public DataSourceFactory getDataSourceFactory(DemoConfiguration configuration) {
return configuration.getDatabaseAppDataSourceFactory();
}
};
@Override
public void initialize(final Bootstrap<DemoConfiguration> bootstrap) {
bootstrap.addBundle(hibernateBundle);
}
@Override
public void run(final DemoConfiguration configuration, final Environment environment) {
final PersonDAO personDAO = new PersonDAO(hibernateBundle.getSessionFactory());
final PersonService personResource = new PersonService(personDAO);
environment.jersey().register(personResource);
}
}
我可以成功启动应用程序,但是在处理请求时它会失败 404 错误代码。并在日志中看到此消息:
org.glassfish.jersey.internal.inject.Providers:在 SERVER 运行时注册的提供程序 com.laboratory.dropwizard.service.PersonService 不实现任何适用于 SERVER 运行时的提供程序接口。由于约束配置问题,提供者 com.laboratory.dropwizard.service.PersonService 将被忽略。
Dropwizard 有什么问题,如何引入工作服务层?谢谢。