我有一个很简单的问题。
在Java代码中,我曾经使用数据传输对象来处理请求/响应。
例如,在我的Spring中,我创建了一些请求dto,如
public class SaveOfficeRequest {
private String officeName;
private String officePhone;
private String officeAddress;
/* getters / setters */
}
之后,我就有了带有“映射”方法的控制器,如
@ResponseBody
public SaveOfficeResponse saveOffice(@RequestBody SaveOfficeRequest) { ... }
。
每个请求都是json请求。当调用某种控制器方法时,我将请求dto转换为域dto实体,并执行一些业务逻辑。
所以!
我应该在基于Play框架的scala新项目中保存这个实践吗?
发布于 2014-04-04 16:31:42
Case类可用于表示请求和响应对象。通过避免在外部接口中直接使用域对象,这有助于使API显式、文档化和类型安全,并隔离关注点。
例如,对于JSON端点,控制器操作可以使用如下模式:
request.body.asJson.map { body =>
body.asOpt[CustomerInsertRequest] match {
case Some(req) => {
try {
val toInsert = req.toCustomer() // Convert request DTO to domain object
val inserted = CustomersService.insert(toInsert)
val dto = CustomerDTO.fromCustomer(inserted)) // Convert domain object to response DTO
val response = ... // Convert DTO to a JSON response
Ok(response)
} catch {
// Handle exception and return failure response
}
}
case None => BadRequest("A CustomerInsertRequest entity was expected in the body.")
}
}.getOrElse {
UnsupportedMediaType("Expecting application/json request body.")
}
https://stackoverflow.com/questions/22865806
复制