Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
382 views
in Technique[技术] by (71.8m points)

spring编写restfull风格的接口开发代价(即: 工作量)比较大, 有没有简化的一些方法

目前我们的所有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风格有什么好呢? 在失去了开发效率与可维护性的前提, 而追求外在???


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

你所提出的问题,跟 RESTful 本身表达的相去甚远。确实需要一部分参数置于 url,但Spring 会自动注入的。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
...