在Play中请求/响应DTO对象

时间:2014-04-04 14:39:48

标签: scala playframework playframework-2.0

我有一个非常简单的问题。

在Java代码中,我曾经使用数据传输对象进行请求/响应。

例如,在我的Spring webapp中,我创建了一些请求dto,比如

public class SaveOfficeRequest {
    private String officeName;
    private String officePhone;
    private String officeAddress;

    /* getters / setters */
}

之后我有控制器"映射"像

这样的方法
@ResponseBody
public SaveOfficeResponse saveOffice(@RequestBody SaveOfficeRequest) { ... }

每个请求都是json请求。当调用某个控制器方法时,我将请求转换为域dto实体并执行一些业务逻辑。

原来如此!

我应该在基于Play Framework的新scala项目中保存练习吗?

1 个答案:

答案 0 :(得分:2)

案例类可用于表示请求和响应对象。这有助于通过避免在外部接口中直接使用域对象来使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.")
}