• 前置条件
    • 介绍
    • 编写api层的DTO
    • 编写Controller
    • Controller 类相关标签
      • UserController.java代码
      • TaskController.java代码

    前置条件

    在开发之前,请确保

    • 本地项目已经创建成功,详见 新建项目
    • 数据库创建成功,详见 初始化数据库

    介绍

    demo需涉及api层的 dto 以及 controller

    编写api层的DTO

    • DTO 类用来封装用户请求的数据信息,这里指的用户可以是另一个计算机系统,不一定是使用用户界面的人。
    • infra层的DTO类不同的是,api层的DTO类不与数据库表一一对应,无需添加@Table注解,也无需继承继承 BaseDTO 类。
    • 创建在 项目模块 的 xxx.api.dto 包下。

    编写Controller

    • Controller 负责对 ModelView 的处理,创建在项目模块的 xxx.api.controller.v1 包下。如 xxx.api.controller.v1
    • 每一个 Controller 是对一种具体的 DTO 资源进行处理的,所以命名为infra层的 DTO 类名尾缀替换为 Controler 。如: TaskController 对应 TaskDTO 类。
    • 需要通过 @RestController 注解该类。

    Controller 类相关标签

    • @Permission ,设置API访问权限,有四种属性
      1. type :设置访问资源层级,包括site,organization,project三种层级。
      1. roles :设置可访问用户角色,此为数组。
      1. permissionLogin :设置是否需要登陆访问。
      1. permissionPublic :设置任意访问。
      1. permissionWithin :是否为内部接口。
    • @ApiOperation ,显示在swagger ui上的接口注释,同时与该接口对应的权限表中的描述字段对应(iam_permission.description)
    • @GetMapping ,是一个组合注解,是@RequestMapping(mathod = RequestMethod.GET)的缩写,@PostMapping等同理。建议使用组合注解。
    • @CustomPageRequest ,自定义swagger界面page、size、sort三个字段的格式,供分页接口使用。

    UserController.java代码

    1. package io.choerodon.todo.api.controller.v1;
    2. //省略 import
    3. @RestController
    4. @RequestMapping(value = "/v1/users")
    5. public class UserController {
    6. private UserService userService;
    7. public UserController(UserService userService) {
    8. this.userService = userService;
    9. }
    10. @PostMapping
    11. @Permission(type = ResourceType.SITE, permissionLogin = true)
    12. @ApiOperation(value = "创建todo用户")
    13. private ResponseEntity<UserDTO> create(@RequestBody UserDTO userDTO) {
    14. return new ResponseEntity<>(userService.createOne(userDTO), HttpStatus.OK);
    15. }
    16. }

    TaskController.java代码

    1. package io.choerodon.todo.api.controller.v1;
    2. // 省略 import
    3. @RestController
    4. @RequestMapping(value = "/v1/tasks")
    5. public class TaskController {
    6. private TaskService taskService;
    7. public TaskController(TaskService taskService) {
    8. this.taskService = taskService;
    9. }
    10. @PostMapping
    11. @Permission(type = ResourceType.SITE)
    12. @ApiOperation(value = "创建Task")
    13. public ResponseEntity<TaskDTO> create(@RequestBody TaskDTO taskDTO) {
    14. return new ResponseEntity<>(taskService.createOne(taskDTO), HttpStatus.OK);
    15. }
    16. @GetMapping("/{id}")
    17. @Permission(type = ResourceType.SITE)
    18. @ApiOperation(value = "根据Id查询task")
    19. public ResponseEntity<TaskDTO> queryById(@PathVariable Long id) {
    20. return new ResponseEntity<>(taskService.queryById(id), HttpStatus.OK);
    21. }
    22. @GetMapping("/taskNumber/{taskNumber}")
    23. @Permission(type = ResourceType.SITE)
    24. @ApiOperation(value = "根据TaskNumber查询task")
    25. public ResponseEntity<TaskDTO> queryByTaskNumber(@PathVariable String taskNumber) {
    26. return new ResponseEntity<>(taskService.queryByTaskNumber(taskNumber), HttpStatus.OK);
    27. }
    28. @DeleteMapping("/{id}")
    29. @Permission(type = ResourceType.SITE)
    30. @ApiOperation(value = "根据Id删除ask")
    31. public void delete(@PathVariable Long id) {
    32. taskService.deleteById(id);
    33. }
    34. @PutMapping("/{id}")
    35. @Permission(type = ResourceType.SITE)
    36. @ApiOperation(value = "更新task")
    37. public ResponseEntity<TaskDTO> update(@PathVariable Long id, @RequestBody TaskDTO taskDTO) {
    38. taskDTO.setId(id);
    39. return new ResponseEntity<>(taskService.update(taskDTO), HttpStatus.OK);
    40. }
    41. }