2014-04-04 30 views
2

我有一个非常简单的问题。请求/响应播放中的DTO对象

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

例如,在我的春天的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

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

马丽娟感谢,费尔南多·科雷亚! –