目前我们的所有controller接口的参数(DTO)都是对象类型, 即使只有一个参数也用一个DTO
这样我们实现了如下方面:
一. 清晰的controller代码
@RequestMapping(path = "/simplelist", method = RequestMethod.GET)
@ApiOperation(value = "查询文件简单列表")
public Ret<FileSimpleQueryRetDTO> simpleList(@Validated FileSimpleListDTO fileSimpleQueryDTO) {
File file = fileSimpleQueryDTO.convertTo(File.class);
//....业务代码
}
由于将参数验证, 接口API说明都放在了DTO中, 而controller只加了一个@Validated注解声明参数是需要验证的即可, FileSimpleListDTO.java 代码如下
@Setter
@Getter
@ApiModel("文件简单列表查询参数")
public class FileSimpleListDTO extends BaseDTO implements DomainConvertor{
@Length(max = 32, message = "父文件夹id最大长度为{max}")
@ApiModelProperty(value = "父文件夹id")
private String pid; // 父文件夹id
@Length(max = 255, message = "文件名最大长度为{max}")
@ApiModelProperty(value = "文件名", name = "文件名")
private String name; // 文件名
@Min(value = 1, message = "页数最小为{value}")
@ApiModelProperty(value = "第几页", name = "第几页")
private Integer pageNum;//页数
@OrderByTypeCheck
@FileQueryOrderByCheck
@ApiModelProperty(value = "排序字段", name = "排序字段", example = "name:asc,age:desc")
private String orderBy;//排序字段, 可多个, 如: name:asc,age:desc
}
二. 方便的 DTO 转 Domain
File file = fileSimpleQueryDTO.convertTo(File.class);
我这个方法是通用的, 就是用beanUtil.copyProperties(), 前提是DTO和Domain的field名字一样, 特别适合有大量参数的情况, 如 各类数据的创建场景
如果改成 restful 风格, 那么DTO里面的参数就要都展开到controller方法的参数代码中, 包括参数验证和api说明, 让代码很乱, 还有拼装成 domain 的时候, 我也需要手动一个一个调用 setter, 累死了
那么改成rest风格有什么好呢? 在失去了开发效率与可维护性的前提, 而追求外在???
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…