前置条件

在开发之前,请确保

介绍

demo需涉及api层的 dto 以及 controller

编写DTO

  • DTO 类用来封装用户请求的数据信息,这里指的用户可以是另一个计算机系统,不一定是使用用户界面的人。
  • 创建在 项目模块 的 xxx.api.dto 包下。
  • 根据需要补充 domain 层对应的 convertor 类。
  • 具体参考创建对应的DTO 类

编写Controller

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

Controller 类相关标签

  • @Permission ,设置API访问权限,有四种属性
    1. permissionLogin :设置是否需要登陆访问
    1. level :设置访问资源层级,包括site,organization,project,user四种层级
    1. roles :设置可访问用户角色,此为数组
    1. permissionPublic :设置任意访问。
  • @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(level = ResourceLevel.SITE)
  12. @ApiOperation(value = "创建todo 用户")
  13. private ResponseEntity<UserDTO> create(@RequestBody UserDTO userDTO) {
  14. return new ResponseEntity<>(userService.create(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(level = ResourceLevel.SITE)
  12. @ApiOperation(value = "创建task")
  13. public ResponseEntity<TaskDTO> create(@RequestBody TaskDTO taskDTO) {
  14. return new ResponseEntity<>(taskService.create(taskDTO), HttpStatus.OK);
  15. }
  16. @DeleteMapping("/{id}")
  17. @Permission(level = ResourceLevel.SITE)
  18. @ApiOperation(value = "根据id删除task")
  19. public void delete(@PathVariable Long id) {
  20. taskService.deleteById(id);
  21. }
  22. @DeleteMapping("/taskNumber/{taskNumber}")
  23. @Permission(level = ResourceLevel.SITE)
  24. @ApiOperation(value = "根据TaskNumber删除task")
  25. public void deleteByTaskNumber(@PathVariable String taskNumber) {
  26. taskService.deleteByTaskNumber(taskNumber);
  27. }
  28. @PutMapping("/{id}")
  29. @Permission(level = ResourceLevel.SITE)
  30. @ApiOperation(value = "更新task")
  31. public ResponseEntity<TaskDTO> update(@PathVariable Long id, @RequestBody TaskDTO taskDTO) {
  32. taskDTO.setId(id);
  33. return new ResponseEntity<>(taskService.update(taskDTO), HttpStatus.OK);
  34. }
  35. @GetMapping("/{id}")
  36. @Permission(level = ResourceLevel.SITE)
  37. @ApiOperation(value = "查询task")
  38. public ResponseEntity<TaskDTO> query(@PathVariable Long id) {
  39. return new ResponseEntity<>(taskService.queryById(id), HttpStatus.OK);
  40. }
  41. }