【发布时间】:2015-04-25 09:46:09
【问题描述】:
我目前正在使用 Play 2.3,我必须处理类似的 URL 映射:
GET /api/companyId/employeeId/tasks
GET /api/companyId/employeeId/timesheets
etc.
在每个 GET 中我都需要执行类似的逻辑:
public Promise<Result> getEmployeeTimesheets(Long companyId, Long employeeId) {
return promise(() -> {
if (!companyRepository.one(companyId).isPresent()) {
return notFound("Company doesn't exist");
}
if (!employeeRepository.one(employeeId).isPresent()) {
return notFound("Employee doesn't exist");
}
if (!employeeRepository.employeeWorksForCompany(companyId, employeeId)) {
return forbidden("Employee doesn't work for this company");
}
// some actual logic here
});
}
这段代码一遍又一遍地重复。到目前为止,我使用普通的旧 inheritance 并将重复的代码移到父控制器类中。它完成了工作,但它肯定不是完美的解决方案(因为我必须在每个控制器操作中调用父方法并手动检查结果)。
Play 中是否有更多的声明性方法可以自动处理 URL 片段(在我们的例子中为/api/companyId/employeeId)并将执行委托给适当的控制器,或者返回错误响应(例如 404 - Not Found)。
【问题讨论】:
标签: java model-view-controller playframework