兵无常势,水无常形。
相关文章 {#相关文章}
本文使用的版本 {#本文使用的版本}
springboot 3.3.1
壳子 {#壳子}
Controller层 {#controller层}
方法命名归约
- 增:add
- 删:delete
- 改:modify
- 查:query
|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 | java @Slf4j @Validated @RequiredArgsConstructor @RestController @RequestMapping("/demo") @Tag(name = "示例", description = "示例相关接口") class DemoController { private final DemoService demoService; }
|
Service层 {#service层}
service / DAO 层方法命名规约
- 获取单个对象的方法用 get 做前缀。
- 获取多个对象的方法用 list 做前缀,复数结尾,如:listObjects
- 获取统计值的方法用 count 做前缀。
- 插入的方法用 save / insert 做前缀。
- 删除的方法用 remove / delete 做前缀。
- 修改的方法用 update 做前缀。
|-----|----------------------------------------------|
| 1 2 | java public interface DemoService { }
|
|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 | java @Slf4j @Service @RequiredArgsConstructor public class DemoServiceImpl implements DemoService { private final DemoMapper demoMapper; private final DemoRepository demoRepository; }
|
Mapper层(DAO层) {#mapper层dao层}
service / DAO 层方法命名规约
- 获取单个对象的方法用 get 做前缀。
- 获取多个对象的方法用 list 做前缀,复数结尾,如:listObjects
- 获取统计值的方法用 count 做前缀。
- 插入的方法用 save / insert 做前缀。
- 删除的方法用 remove / delete 做前缀。
- 修改的方法用 update 做前缀。
|-------|-----------------------------------------------------|
| 1 2 3 | java @Mapper public interface DemoMapper { }
|
Get请求 {#get请求}
分页查询(Query传参) {#分页查询query传参}
Mybatis写法 {#mybatis写法}
|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | java @Operation(summary = "查询") @GetMapping("") public PageInfo<DemoVO> queryList( @Parameter(description = "页码,不传查所有", example = "1") @Min(1) @RequestParam(required = false) Integer pageNum, @Parameter(description = "每页数量,不传查所有", example = "10") @Min(1) @Max(100) @RequestParam(required = false) Integer pageSize, @Parameter(description = "是否包含车队的预约记录, true:包含, false:不包含, 默认为true", example = "true") @RequestParam(required = false, defaultValue = "true") Boolean containFleet, @Parameter(description = "名称", example = "zhangSan") @RequestParam(required = false) String name, @Parameter(description = "上期结转电量", example = "1.0") @RequestParam(required = false) BigDecimal lastEle, @Parameter(description = "开始日期", example = "1970-01-01") @RequestParam(required = false) LocalDate startDate, @Parameter(description = "结束日期", example = "1970-01-01") @RequestParam(required = false) LocalDate endDate, @Schema(description = "开始时间", example = "00:00:00", type = "string", format = "time") @RequestParam(required = false) LocalTime startTime, @Schema(description = "结束时间", example = "00:00:00", type = "string", format = "time") @RequestParam(required = false) LocalTime endTime, @Parameter(description = "开始日期时间", example = "1970-01-01T00:00:00Z") @RequestParam(required = false) ZonedDateTime startDateTime, @Parameter(description = "结束日期时间", example = "1970-01-01T00:00:00Z") @RequestParam(required = false) ZonedDateTime endDateTime, @Parameter(description = "用户活跃") @RequestParam(required = false) UserStatusEnum userStatus, @Parameter(description = "用户类型") @RequestParam(required = false, name = "userType") List<String> userTypeList) { List<DemoVO> demoVoList = demoService.list(pageNum, pageSize, name, startDate, endDate, startTime, endTime, startDateTime, endDateTime, userTypeList); return new PageInfo<>(demoVoList); }
|
|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 | java List<DemoVO> list(@Nullable Integer pageNum, @Nullable Integer pageSize, String name, LocalDate startDate, LocalDate endDate, LocalTime startTime, LocalTime endTime, ZonedDateTime startDateTime, ZonedDateTime endDateTime, List<String> userType);
|
|-------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | java @Override public List<DemoVO> list(@Nullable Integer pageNum, @Nullable Integer pageSize, String name, LocalDate startDate, LocalDate endDate, LocalTime startTime, LocalTime endTime, ZonedDateTime startDateTime, ZonedDateTime endDateTime, List<String> userTypeList) { // 页码 和 每页数量 都不为空 才分页 if (pageNum != null && pageSize != null) { if (pageNum <= 0) { throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "pageNum必须大于0"); } if (pageSize <= 0) { throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "pageSize必须大于0"); } PageHelper.startPage(pageNum, pageSize); } return demoMapper.selectPage(name, startDate, endDate, startTime, endTime, startDateTime, endDateTime, userTypeList); }
|
|-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | java List<DemoVO> selectPage(@Param("name") String name, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate, @Param("startTime") LocalTime startTime, @Param("endTime") LocalTime endTime, @Param("startDateTime") ZonedDateTime startDateTime, @Param("endDateTime") ZonedDateTime endDateTime, @Param("userTypeList") List<String> userTypeList);
|
|----------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | xml <select id="selectPage" resultType="com.zx.alice.pojo.vo.DemoVO"> select d.id, d.last_ele, d.start_date, d.end_date, d.start_time, d.end_time, d.start_date_time, d.end_date_time, d.user_type from demo d where d.deleted = 0 <if test="startDateTime != null and endDateTime != null"> and d.end_date_time between #{startDateTime} and #{endDateTime} </if> <if test="userTypeList != null and userTypeList.size() >0"> and d.user_type in <foreach collection="userTypeList" item="userType" index="index" open="(" close=")" separator=","> #{userType} </foreach> </if> <!-- 在d.marks中是否能匹配到markList中一个元素。如markList为集合[1,2,3] d.star_mark_ids存值示例:1,2,3--> <if test="markIdList != null and markIdList.size() > 0"> and <foreach item="markId" collection="markIdList" open="(" separator="or" close=")"> (find_in_set(#{markId}, d.mark_id) > 0) </foreach> </if> </select>
|
JPA写法 {#jpa写法}
先查询所有,再逻辑分页
- service查询所有
|-------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | java @Override public List<DemoVO> list(@Nullable Integer pageNum, @Nullable Integer pageSize, String name, LocalDate startDate, LocalDate endDate, LocalTime startTime, LocalTime endTime, ZonedDateTime startDateTime, ZonedDateTime endDateTime, List<String> userTypeList) { List<Demo> noDeletedList = demoRepository.findNoDeleted(); List<DemoVO> demoVOList = noDeletedList .stream() .map(demo -> { DemoVO demoVO = new DemoVO(); demoVO.setId(demo.getId()); demoVO.setName(demo.getName()); demoVO.setLastEle(demo.getLastEle()); demoVO.setStartDate(demo.getStartDate()); demoVO.setEndDate(demo.getEndDate()); demoVO.setStartTime(demo.getStartTime()); demoVO.setEndTime(demo.getEndTime()); demoVO.setStartDateTime(demo.getStartDateTime().atZone(ZoneId.systemDefault())); demoVO.setEndDateTime(demo.getEndDateTime().atZone(ZoneId.systemDefault())); demoVO.setCreateDateTime(demo.getCreateDateTime().atZone(ZoneId.systemDefault())); demoVO.setCreateBy(demo.getCreateBy()); demoVO.setUpdateDateTime(demo.getUpdateDateTime().atZone(ZoneId.systemDefault())); demoVO.setUserType(demo.getUserType()); demoVO.setDeleted(demo.getDeleted()); demoVO.setUserStatus(demo.getUserStatus()); return demoVO; }) .collect(Collectors.toList()); return demoVOList; }
|
- controller层逻辑分页
|---|-------------------------------------------------------------------------------------|
| 1 | java PageInfo<Demo> demoPageInfo = logicPagination(pageNum, pageSize, list);
|
excel文件 导出 {#excel文件-导出}
|----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | java @Operation(summary = "excel文件 导出") @GetMapping("/excel") public void queryExcel( HttpServletResponse response, @Parameter(description = "页码,不传查所有", example = "1") @Min(1) @RequestParam(required = false) Integer pageNum, @Parameter(description = "每页数量,不传查所有", example = "10") @Min(1) @Max(100) @RequestParam(required = false) Integer pageSize, @Parameter(description = "名称", example = "zhangSan") @RequestParam(required = false) String name, @Parameter(description = "上期结转电量", example = "1.0") @RequestParam(required = false) BigDecimal lastEle, @Parameter(description = "开始日期", example = "1970-01-01") @RequestParam(required = false) LocalDate startDate, @Parameter(description = "结束日期", example = "1970-01-01") @RequestParam(required = false) LocalDate endDate, @Schema(description = "开始时间", example = "00:00:00", type = "string", format = "time") @RequestParam(required = false) LocalTime startTime, @Schema(description = "结束时间", example = "00:00:00", type = "string", format = "time") @RequestParam(required = false) LocalTime endTime, @Parameter(description = "开始日期时间", example = "1970-01-01T00:00:00Z") @RequestParam(required = false) ZonedDateTime startDateTime, @Parameter(description = "结束日期时间", example = "1970-01-01T00:00:00Z") @RequestParam(required = false) ZonedDateTime endDateTime, @Parameter(description = "用户活跃") @RequestParam(required = false) UserStatusEnum userStatus, @Parameter(description = "用户类型") @RequestParam(required = false, name = "userType") List<String> userTypeList) { demoService.getExcel(response, pageNum, pageSize, name, startDate, endDate, startTime, endTime, startDateTime, endDateTime, userTypeList); }
|
|-----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 | java void getExcel(HttpServletResponse response, @Nullable Integer pageNum, @Nullable Integer pageSize, String name, LocalDate startDate, LocalDate endDate, LocalTime startTime, LocalTime endTime, ZonedDateTime startDateTime, ZonedDateTime endDateTime, List<String> userType);
|
|-------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | java @Override public void getExcel(HttpServletResponse response, @Nullable Integer pageNum, @Nullable Integer pageSize, String name, LocalDate startDate, LocalDate endDate, LocalTime startTime, LocalTime endTime, ZonedDateTime startDateTime, ZonedDateTime endDateTime, List<String> userTypeList) { List<DemoVO> demoVoList = list(null, null, name, startDate, endDate, startTime, endTime, startDateTime, endDateTime, userTypeList); // 第三方excel框架导出 }
|
第三方excel框架导出
批量查询(根据主键 + Path路径传参) {#批量查询根据主键--path路径传参}
|-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | java @Operation(summary = "查询") @GetMapping("/{id}") public List<DemoVO> query(@Parameter(description = "主键") @PathVariable(name = "id") List<Long> idList) { return demoService.get(idList); }
|
|---|------------------------------------------------------------|
| 1 | java List<DemoVO> get(@Nullable List<Long> idList);
|
|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 | java @Override public List<DemoVO> get(@Nullable List<Long> idList) { if (ObjectUtils.isEmpty(idList)) { return Collections.emptyList(); } return idList.stream().map(id -> { Demo demo = demoRepository.findById(id).orElse(new Demo()); DemoVO demoVO = new DemoVO(); BeanUtils.copyProperties(demo, demoVO); return demoVO; }).toList(); }
|
Put请求 {#put请求}
单个修改(根据主键) {#单个修改根据主键}
|-----------|-----------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | java @Operation(summary = "修改") @PutMapping("") public void modify(@RequestBody @Valid DemoDTO dto) { demoService.update(dto); }
|
|---|-------------------------------------------------|
| 1 | java void update(@Nullable DemoDTO dto);
|
|-------------|--------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 | java @Override public void update(@Nullable DemoDTO dto) { if (dto == null) { return; } }
|
批量修改(根据主键) {#批量修改根据主键}
|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | java @Operation(summary = "修改") @PutMapping("") public void modify(@RequestBody @Valid List<DemoDTO> dtoList) { demoService.update(dtoList); }
|
|---|-----------------------------------------------------------|
| 1 | java void update(@Nullable List<DemoDTO> dtoList);
|
|-------------|-----------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 | java @Override public void update(@Nullable List<DemoDTO> dtoList) { if (ObjectUtils.isEmpty(dtoList)) { return; } }
|
Post请求 {#post请求}
单个新增 {#单个新增}
|-----------|-------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | java @Operation(summary = "新增") @PostMapping("") public void add(@RequestBody @Valid DemoDTO dto) { demoService.save(dto); }
|
|---|-----------------------------------------------|
| 1 | java void save(@Nullable DemoDTO dto);
|
|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 | java @Override @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) public void save(@Nullable DemoDTO dto) { if (dto == null) { return; } }
|
批量新增 {#批量新增}
|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | java @Operation(summary = "新增") @PostMapping("") public void add(@RequestBody @Valid List<DemoDTO> dtoList) { demoService.save(dtoList); }
|
|---|------------------------------------------------------|
| 1 | java void save(@Empty List<DemoDTO> dtoList);
|
|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 | java @Override @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) public void save(@Nullable List<DemoDTO> dtoList) { if (ObjectUtils.isEmpty(dtoList)) { return; } }
|
excel文件 导入 {#excel文件-导入}
Controller层 {#controller层-1}
@RequestParam List
|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 | java @Operation(summary = "新增excel文件") @PostMapping(value = "/excel", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public void addExcel(@Parameter(description = "文件列表") @RequestParam(name = "file") List<MultipartFile> fileList, @Parameter(description = "名称", example = "zhangSan") @RequestParam() String name) { for (MultipartFile file : fileList) { if (!List.of("application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet").contains(file.getContentType())) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "入参文件必须是Excel文件"); } } demoService.saveExcel(fileList); }
|
@RequestParam
|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | java @Operation(summary = "新增excel文件") @PostMapping(value = "/excel2", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public void addExcel2(@Parameter(description = "单个文件") @RequestParam(name = "file") MultipartFile file, @Parameter(description = "名称", example = "zhangSan") @RequestParam() String name) { }
|
@RequestPart List
|-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | java @Operation(summary = "新增excel文件") @PostMapping(value = "/excel3", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public void addExcel3(@Parameter(description = "文件列表") @RequestPart(name = "file") List<MultipartFile> fileList, @Parameter(description = "名称", example = "zhangSan") @RequestParam() String name) { }
|
@RequestPart
|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | java @Operation(summary = "新增excel文件") @PostMapping(value = "/excel4", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public void addExcel4(@Parameter(description = "单个文件") @RequestPart() MultipartFile file, @Parameter(description = "名称", example = "zhangSan") @RequestParam() String name) { }
|
json + form-data
不建议混合传,还是建议文件另外传,存单独的file表,解耦
|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 | java @Operation(summary = "新增excel文件 ") @PostMapping(value = "/excel5", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public void addExcel5( @Parameter(description = "单个文件") @RequestPart MultipartFile file, @Parameter(description = "名称", example = "zhangSan") @RequestParam String name, @ModelAttribute DemoDTO dto) { // 注意:Dto的属性需要与表单字段名称匹配 }
|
jsonStr + form-data
不建议混合传,还是建议文件另外传,存单独的file表,解耦
|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 | java @Operation(summary = "新增excel文件") @PostMapping(value = "/excel6", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public void addExcel6( @Parameter(description = "单个文件") @RequestPart MultipartFile file, @Parameter(description = "名称", example = "zhangSan") @RequestParam String name, @Parameter(description = "数据对象") @RequestPart String dtoJson) throws JsonProcessingException { // 在此方法内部,需要手动将dtoJson反序列化为DemoDTO对象 DemoDTO dto = new ObjectMapper().readValue(dtoJson, DemoDTO.class); }
|
Service层 {#service层-1}
|---|------------------------------------------------------------------|
| 1 | java void saveExcel(@Nullable List<MultipartFile> files);
|
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 | java @Override public void saveExcel(@Nullable List<MultipartFile> files) { if (ObjectUtils.isEmpty(files)) { return; } for (MultipartFile file : files) { // 第三方excele解析 } }
|
第三方excel框架导出
Delete请求 {#delete请求}
批量删除(根据主键 + Path路径传参) {#批量删除根据主键--path路径传参}
|-----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | java @Operation(summary = "删除") @DeleteMapping("/{id}") public void delete(@Parameter(description = "主键") @PathVariable(name = "id") List<Long> idList) { demoService.remove(idList); }
|
|---|-------------------------------------------------------|
| 1 | java void remove(@Nullable List<Long> idList);
|
|-------------|------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 | java @Override public void remove(@Nullable List<Long> idList) { if (ObjectUtils.isEmpty(idList)) { return; } }
|
DemoDTO {#demodto}
|----------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | java @Data @Validated @Schema(description = "示例信息") public class DemoDTO { @Schema(description = "主键") private Long id; @NotBlank() @Schema(description = "张三") private String name; @NotNull() @Schema(description = "上期结转电量") private BigDecimal lastEle; @Schema(description = "开始日期") private LocalDate startDate; @Schema(description = "结束日期") private LocalDate endDate; @Schema(description = "开始时间", example = "00:00:00", type = "string", format = "time") private LocalTime startTime; @Schema(description = "结束时间", example = "00:00:00", type = "string", format = "time") private LocalTime endTime; @Schema(description = "开始日期时间") private ZonedDateTime startDateTime; @Schema(description = "结束日期时间") private ZonedDateTime endDateTime; @Schema(description = "创建日期时间") private ZonedDateTime createDateTime; @Hidden // swagger3隐藏字段 @Schema(description = "swagger3隐藏字段") private String hidden; }
|
Websocket {#websocket}
|----------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | xml <dependencies> <!-- Spring Boot Starter Web, 它已经包含了Tomcat的WebSocket支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Starter Test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- WebSocket 消息代理 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> </dependencies>
|
|----------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | java import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { // 注册一个WebSocket的端点,客户端将连接到这个端点 registry.addEndpoint("/websocket").withSockJS(); } @Override public void configureMessageBroker(MessageBrokerRegistry registry) { // 设置消息代理的前缀 registry.enableSimpleBroker("/topic"); // 设置应用程序的前缀,以便从WebSocket客户端接收消息 registry.setApplicationDestinationPrefixes("/app"); } }
|
|-------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | java import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.stereotype.Controller; @Controller public class GreetingController { @MessageMapping("/hello") @SendTo("/topic/greetings") public Greeting greeting(HelloMessage message) throws Exception { Thread.sleep(1000); // 模拟延迟 return new Greeting("Hello, " + message.getName() + "!"); } } // DTO类 public class HelloMessage { private String name; // getter 和 setter } public class Greeting { private String content; // 构造器、getter 和 setter }
|