Commit 463fbb4ddf8162dc71030e49a8cfea1b772c8f0d
1 parent
27b23e0d
1、添加MyObjectUtils工具类,添加方法查找对象中属性值为null的属性名列表
2、修改WorkDto的静态方法toWork,添加参数work,让workDto的属性整合到指定的work中 3、修改WorkServiceImpl,完善listWorks方法,修正updateWork方法,使用WorkDto的新的toWork方法整合Work对戏 4、删除WorkPageRequest 5、修改WorkQueryRequest属性,将workPageRequest的属性移入,删除不必要的属性,添加is_template属性时手动生成get/set方法,使用Lombok生成有问题 6、修改WorkUpdateRequest属性,删除createTime的初始化定义 7、修改WorkController,添加initBinder,适应前端以下划线命名的参数,传到后台不能转换成对象的问题 8、添加UploadController,值添加方法前端映射,方法实现后续再议 9、修改pom.xml,修改spring-boot-maven-plugin定义,添加<fork>false</fork>,解决不能debug的问题
Showing
13 changed files
with
173 additions
and
120 deletions
pom.xml
| @@ -87,6 +87,9 @@ | @@ -87,6 +87,9 @@ | ||
| 87 | <plugin> | 87 | <plugin> |
| 88 | <groupId>org.springframework.boot</groupId> | 88 | <groupId>org.springframework.boot</groupId> |
| 89 | <artifactId>spring-boot-maven-plugin</artifactId> | 89 | <artifactId>spring-boot-maven-plugin</artifactId> |
| 90 | + <configuration> | ||
| 91 | + <fork>false</fork> | ||
| 92 | + </configuration> | ||
| 90 | </plugin> | 93 | </plugin> |
| 91 | </plugins> | 94 | </plugins> |
| 92 | </build> | 95 | </build> |
src/main/java/com/bsth/luban_springboot2/controller/UploadController.java
0 → 100644
| 1 | +package com.bsth.luban_springboot2.controller; | ||
| 2 | + | ||
| 3 | +import org.springframework.web.bind.annotation.PostMapping; | ||
| 4 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 5 | +import org.springframework.web.bind.annotation.RequestParam; | ||
| 6 | +import org.springframework.web.bind.annotation.RestController; | ||
| 7 | +import org.springframework.web.multipart.MultipartFile; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * 上传文件控制器 | ||
| 11 | + * TODO:swagger标注后面再加 | ||
| 12 | + */ | ||
| 13 | +@RestController | ||
| 14 | +@RequestMapping(value = "/upload") | ||
| 15 | +public class UploadController { | ||
| 16 | + | ||
| 17 | + @PostMapping | ||
| 18 | + public void upload( | ||
| 19 | + @RequestParam(name = "files") MultipartFile file, | ||
| 20 | + @RequestParam(name = "workId") Long workId) { | ||
| 21 | + // TODO:后面再做上传 | ||
| 22 | + | ||
| 23 | + | ||
| 24 | + System.out.println(workId); | ||
| 25 | + } | ||
| 26 | +} |
src/main/java/com/bsth/luban_springboot2/controller/WorkController.java
| @@ -2,19 +2,19 @@ package com.bsth.luban_springboot2.controller; | @@ -2,19 +2,19 @@ package com.bsth.luban_springboot2.controller; | ||
| 2 | 2 | ||
| 3 | import com.bsth.luban_springboot2.dto.WorkDto; | 3 | import com.bsth.luban_springboot2.dto.WorkDto; |
| 4 | import com.bsth.luban_springboot2.dto.request.WorkCreateRequest; | 4 | import com.bsth.luban_springboot2.dto.request.WorkCreateRequest; |
| 5 | -import com.bsth.luban_springboot2.dto.request.WorkPageRequest; | ||
| 6 | import com.bsth.luban_springboot2.dto.request.WorkQueryRequest; | 5 | import com.bsth.luban_springboot2.dto.request.WorkQueryRequest; |
| 7 | import com.bsth.luban_springboot2.dto.request.WorkUpdateRequest; | 6 | import com.bsth.luban_springboot2.dto.request.WorkUpdateRequest; |
| 8 | import com.bsth.luban_springboot2.service.WorkService; | 7 | import com.bsth.luban_springboot2.service.WorkService; |
| 9 | import org.springframework.beans.BeanUtils; | 8 | import org.springframework.beans.BeanUtils; |
| 10 | import org.springframework.beans.factory.annotation.Autowired; | 9 | import org.springframework.beans.factory.annotation.Autowired; |
| 11 | -import org.springframework.data.domain.Page; | ||
| 12 | import org.springframework.data.domain.PageRequest; | 10 | import org.springframework.data.domain.PageRequest; |
| 13 | import org.springframework.data.domain.Sort; | 11 | import org.springframework.data.domain.Sort; |
| 14 | import org.springframework.http.HttpStatus; | 12 | import org.springframework.http.HttpStatus; |
| 13 | +import org.springframework.web.bind.WebDataBinder; | ||
| 15 | import org.springframework.web.bind.annotation.*; | 14 | import org.springframework.web.bind.annotation.*; |
| 16 | 15 | ||
| 17 | import javax.validation.Valid; | 16 | import javax.validation.Valid; |
| 17 | +import java.util.List; | ||
| 18 | 18 | ||
| 19 | /** | 19 | /** |
| 20 | * 作品控制器(和鲁班h5后台strapi.js保持一致)。 | 20 | * 作品控制器(和鲁班h5后台strapi.js保持一致)。 |
| @@ -32,17 +32,33 @@ public class WorkController { | @@ -32,17 +32,33 @@ public class WorkController { | ||
| 32 | return this.workService.findWorkById(id); | 32 | return this.workService.findWorkById(id); |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | + @InitBinder | ||
| 36 | + protected void initBinder(WebDataBinder binder) { | ||
| 37 | + // springMVC请求参数绑定对象属性时,忽略前缀是下划线的名字,如_ocx这种参数 | ||
| 38 | + // 1、不使用下划线 | ||
| 39 | + // 2、使用initBinder定义没有前缀 | ||
| 40 | + binder.setFieldMarkerPrefix(null); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + // 作品数量 | ||
| 44 | + @RequestMapping(value = "/count", method = RequestMethod.GET) | ||
| 45 | + public Long countWork(@Valid @ModelAttribute WorkQueryRequest request) { | ||
| 46 | + WorkDto workDto = WorkDto.getBuilder() | ||
| 47 | + .setTemplate(request.isIs_template()) | ||
| 48 | + .build(); | ||
| 49 | + return this.workService.countWork(workDto); | ||
| 50 | + } | ||
| 51 | + | ||
| 35 | // 分页查询work | 52 | // 分页查询work |
| 36 | @RequestMapping(method = RequestMethod.GET) | 53 | @RequestMapping(method = RequestMethod.GET) |
| 37 | - public Page<WorkDto> listWorks( | ||
| 38 | - @Valid @ModelAttribute WorkQueryRequest request, | ||
| 39 | - @Valid @ModelAttribute WorkPageRequest workPageRequest) { | 54 | + public List<WorkDto> listWorks(@Valid @ModelAttribute WorkQueryRequest request) { |
| 40 | PageRequest pageRequest = PageRequest.of( | 55 | PageRequest pageRequest = PageRequest.of( |
| 41 | - workPageRequest.getPage(), workPageRequest.getSize(), | 56 | + request.get_start(), request.get_limit(), |
| 42 | Sort.Direction.DESC, "createTime"); | 57 | Sort.Direction.DESC, "createTime"); |
| 43 | 58 | ||
| 44 | - WorkDto workDto = new WorkDto(); | ||
| 45 | - BeanUtils.copyProperties(request, workDto); | 59 | + WorkDto workDto = WorkDto.getBuilder() |
| 60 | + .setTemplate(request.isIs_template()) | ||
| 61 | + .build(); | ||
| 46 | return this.workService.listWorks(workDto, pageRequest); | 62 | return this.workService.listWorks(workDto, pageRequest); |
| 47 | } | 63 | } |
| 48 | 64 | ||
| @@ -77,14 +93,6 @@ public class WorkController { | @@ -77,14 +93,6 @@ public class WorkController { | ||
| 77 | return this.workService.markWorkAsTemplate(id); | 93 | return this.workService.markWorkAsTemplate(id); |
| 78 | } | 94 | } |
| 79 | 95 | ||
| 80 | - // 作品数量 | ||
| 81 | - @RequestMapping(value = "/count", method = RequestMethod.GET) | ||
| 82 | - public Long countWork(@Valid @ModelAttribute WorkQueryRequest request) { | ||
| 83 | - WorkDto workDto = new WorkDto(); | ||
| 84 | - BeanUtils.copyProperties(request, workDto); | ||
| 85 | - return this.workService.countWork(workDto); | ||
| 86 | - } | ||
| 87 | - | ||
| 88 | // 使用模版创建作品 | 96 | // 使用模版创建作品 |
| 89 | @RequestMapping(value = "/use-template/{id}", method = RequestMethod.POST) | 97 | @RequestMapping(value = "/use-template/{id}", method = RequestMethod.POST) |
| 90 | public WorkDto useTemplate(@PathVariable Long id) { | 98 | public WorkDto useTemplate(@PathVariable Long id) { |
src/main/java/com/bsth/luban_springboot2/dto/WorkDto.java
| 1 | package com.bsth.luban_springboot2.dto; | 1 | package com.bsth.luban_springboot2.dto; |
| 2 | 2 | ||
| 3 | import com.bsth.luban_springboot2.entity.Work; | 3 | import com.bsth.luban_springboot2.entity.Work; |
| 4 | +import com.bsth.luban_springboot2.utils.MyObjectUtils; | ||
| 4 | import com.fasterxml.jackson.annotation.JsonProperty; | 5 | import com.fasterxml.jackson.annotation.JsonProperty; |
| 5 | import com.fasterxml.jackson.core.JsonProcessingException; | 6 | import com.fasterxml.jackson.core.JsonProcessingException; |
| 6 | import com.fasterxml.jackson.core.type.TypeReference; | 7 | import com.fasterxml.jackson.core.type.TypeReference; |
| 7 | import com.fasterxml.jackson.databind.ObjectMapper; | 8 | import com.fasterxml.jackson.databind.ObjectMapper; |
| 8 | import org.springframework.beans.BeanUtils; | 9 | import org.springframework.beans.BeanUtils; |
| 9 | -import org.springframework.beans.BeanWrapper; | ||
| 10 | -import org.springframework.beans.BeanWrapperImpl; | ||
| 11 | import org.springframework.util.CollectionUtils; | 10 | import org.springframework.util.CollectionUtils; |
| 12 | import org.springframework.util.StringUtils; | 11 | import org.springframework.util.StringUtils; |
| 13 | 12 | ||
| 14 | import java.io.Serializable; | 13 | import java.io.Serializable; |
| 15 | import java.util.Date; | 14 | import java.util.Date; |
| 16 | -import java.util.HashSet; | ||
| 17 | import java.util.List; | 15 | import java.util.List; |
| 18 | -import java.util.Set; | ||
| 19 | 16 | ||
| 20 | /** | 17 | /** |
| 21 | * 作品Dto。 | 18 | * 作品Dto。 |
| @@ -168,12 +165,27 @@ public class WorkDto implements Serializable { | @@ -168,12 +165,27 @@ public class WorkDto implements Serializable { | ||
| 168 | 165 | ||
| 169 | /** | 166 | /** |
| 170 | * 转换成Work对象。 | 167 | * 转换成Work对象。 |
| 171 | - * @param workDto | 168 | + * @param work 原始work对象 |
| 169 | + * @param workDto 等待复制用的workDto | ||
| 170 | + * @param ignoreNullProperties 是否忽略空值 | ||
| 172 | * @return | 171 | * @return |
| 173 | */ | 172 | */ |
| 174 | - public static Work toWork(WorkDto workDto) { | ||
| 175 | - Work work = new Work(); | ||
| 176 | - BeanUtils.copyProperties(workDto, work); | 173 | + public static Work toWork(Work work, WorkDto workDto, boolean ignoreNullProperties) { |
| 174 | + if (work == null) { | ||
| 175 | + throw new RuntimeException("原始work对象为空!"); | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + if (ignoreNullProperties) { | ||
| 179 | + List<String> emptyPropertyNames = MyObjectUtils.getNullValueProperties(workDto); | ||
| 180 | + if (CollectionUtils.isEmpty(emptyPropertyNames)) { | ||
| 181 | + BeanUtils.copyProperties(workDto, work); | ||
| 182 | + } else { | ||
| 183 | + String[] result = new String[emptyPropertyNames.size()]; | ||
| 184 | + BeanUtils.copyProperties(workDto, work, (String[]) emptyPropertyNames.toArray(result)); | ||
| 185 | + } | ||
| 186 | + } else { | ||
| 187 | + BeanUtils.copyProperties(workDto, work); | ||
| 188 | + } | ||
| 177 | if (!CollectionUtils.isEmpty(workDto.getPages())) { | 189 | if (!CollectionUtils.isEmpty(workDto.getPages())) { |
| 178 | ObjectMapper objectMapper = new ObjectMapper(); | 190 | ObjectMapper objectMapper = new ObjectMapper(); |
| 179 | try { | 191 | try { |
| @@ -184,8 +196,10 @@ public class WorkDto implements Serializable { | @@ -184,8 +196,10 @@ public class WorkDto implements Serializable { | ||
| 184 | } | 196 | } |
| 185 | 197 | ||
| 186 | } | 198 | } |
| 199 | + | ||
| 187 | return work; | 200 | return work; |
| 188 | } | 201 | } |
| 202 | + | ||
| 189 | public static Builder getBuilder() { | 203 | public static Builder getBuilder() { |
| 190 | return new Builder(); | 204 | return new Builder(); |
| 191 | } | 205 | } |
| @@ -278,42 +292,22 @@ public class WorkDto implements Serializable { | @@ -278,42 +292,22 @@ public class WorkDto implements Serializable { | ||
| 278 | /** | 292 | /** |
| 279 | * 使用work对象直接复制属性。 | 293 | * 使用work对象直接复制属性。 |
| 280 | * @param work | 294 | * @param work |
| 295 | + * @param ignoreNullProperties 是否忽略空值 | ||
| 281 | * @return | 296 | * @return |
| 282 | */ | 297 | */ |
| 283 | - public Builder setPropertyFromWork(Work work) { | ||
| 284 | - setPropertyFromWork(work, false); | ||
| 285 | - return this; | ||
| 286 | - } | ||
| 287 | - /** | ||
| 288 | - * 使用work对象直接复制属性(忽略空值属性)。 | ||
| 289 | - * @param work | ||
| 290 | - * @return | ||
| 291 | - */ | ||
| 292 | - public Builder setPropertyFromWorkIgnoreNullProperties(Work work) { | ||
| 293 | - setPropertyFromWork(work, true); | ||
| 294 | - return this; | ||
| 295 | - } | ||
| 296 | - | ||
| 297 | - private void setPropertyFromWork(Work work, boolean ignoreNullProperties) { | 298 | + public Builder setPropertyFromWork(Work work, boolean ignoreNullProperties) { |
| 298 | if (ignoreNullProperties) { | 299 | if (ignoreNullProperties) { |
| 299 | - // 查找空值属性名数组 | ||
| 300 | - final BeanWrapper src = new BeanWrapperImpl(work); | ||
| 301 | - java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors(); | ||
| 302 | - Set emptyNames = new HashSet(); | ||
| 303 | - for(java.beans.PropertyDescriptor pd : pds) { | ||
| 304 | - //check if value of this property is null then add it to the collection | ||
| 305 | - Object srcValue = src.getPropertyValue(pd.getName()); | ||
| 306 | - if (srcValue == null) { | ||
| 307 | - emptyNames.add(pd.getName()); | ||
| 308 | - } | 300 | + List<String> emptyPropertyNames = MyObjectUtils.getNullValueProperties(work); |
| 301 | + if (CollectionUtils.isEmpty(emptyPropertyNames)) { | ||
| 302 | + BeanUtils.copyProperties(work, this); | ||
| 303 | + } else { | ||
| 304 | + String[] result = new String[emptyPropertyNames.size()]; | ||
| 305 | + BeanUtils.copyProperties(work, this, (String[]) emptyPropertyNames.toArray(result)); | ||
| 309 | } | 306 | } |
| 310 | - String[] result = new String[emptyNames.size()]; | ||
| 311 | - BeanUtils.copyProperties(work, this, (String[]) emptyNames.toArray(result)); | ||
| 312 | - | ||
| 313 | } else { | 307 | } else { |
| 314 | BeanUtils.copyProperties(work, this); | 308 | BeanUtils.copyProperties(work, this); |
| 315 | } | 309 | } |
| 316 | - if (!StringUtils.hasText(work.getPages())) { | 310 | + if (StringUtils.hasText(work.getPages())) { |
| 317 | ObjectMapper objectMapper = new ObjectMapper(); | 311 | ObjectMapper objectMapper = new ObjectMapper(); |
| 318 | TypeReference<List<Object>> type = new TypeReference<List<Object>>() {}; | 312 | TypeReference<List<Object>> type = new TypeReference<List<Object>>() {}; |
| 319 | try { | 313 | try { |
| @@ -325,6 +319,7 @@ public class WorkDto implements Serializable { | @@ -325,6 +319,7 @@ public class WorkDto implements Serializable { | ||
| 325 | } | 319 | } |
| 326 | 320 | ||
| 327 | } | 321 | } |
| 322 | + return this; | ||
| 328 | } | 323 | } |
| 329 | 324 | ||
| 330 | public WorkDto build() { | 325 | public WorkDto build() { |
src/main/java/com/bsth/luban_springboot2/dto/request/WorkPageRequest.java deleted
100644 → 0
| 1 | -package com.bsth.luban_springboot2.dto.request; | ||
| 2 | - | ||
| 3 | -import com.fasterxml.jackson.annotation.JsonProperty; | ||
| 4 | -import lombok.Data; | ||
| 5 | - | ||
| 6 | -/** | ||
| 7 | - * 分页请求。 | ||
| 8 | - */ | ||
| 9 | -@Data | ||
| 10 | -public class WorkPageRequest { | ||
| 11 | - /** 第几页(从0开始) */ | ||
| 12 | - @JsonProperty(value = "_start") | ||
| 13 | - private Integer page; | ||
| 14 | - /** 每页记录数 */ | ||
| 15 | - @JsonProperty(value = "_limit") | ||
| 16 | - private Integer size; | ||
| 17 | -} |
src/main/java/com/bsth/luban_springboot2/dto/request/WorkQueryRequest.java
| 1 | package com.bsth.luban_springboot2.dto.request; | 1 | package com.bsth.luban_springboot2.dto.request; |
| 2 | 2 | ||
| 3 | -import com.fasterxml.jackson.annotation.JsonProperty; | ||
| 4 | import lombok.Data; | 3 | import lombok.Data; |
| 5 | 4 | ||
| 6 | /** | 5 | /** |
| @@ -8,13 +7,17 @@ import lombok.Data; | @@ -8,13 +7,17 @@ import lombok.Data; | ||
| 8 | */ | 7 | */ |
| 9 | @Data | 8 | @Data |
| 10 | public class WorkQueryRequest { | 9 | public class WorkQueryRequest { |
| 11 | - private String title; | 10 | + private boolean is_template; |
| 11 | + /** 每页记录数 */ | ||
| 12 | + private Integer _limit; | ||
| 13 | + /** 第几页(从0开始) */ | ||
| 14 | + private Integer _start; | ||
| 12 | 15 | ||
| 13 | - private String description; | 16 | + public boolean isIs_template() { |
| 17 | + return is_template; | ||
| 18 | + } | ||
| 14 | 19 | ||
| 15 | - @JsonProperty(value = "is_publish") | ||
| 16 | - private boolean publish = false; | ||
| 17 | - | ||
| 18 | - @JsonProperty(value = "is_template") | ||
| 19 | - private boolean template = false; | 20 | + public void setIs_template(boolean is_template) { |
| 21 | + this.is_template = is_template; | ||
| 22 | + } | ||
| 20 | } | 23 | } |
src/main/java/com/bsth/luban_springboot2/dto/request/WorkUpdateRequest.java
| @@ -23,7 +23,7 @@ public class WorkUpdateRequest { | @@ -23,7 +23,7 @@ public class WorkUpdateRequest { | ||
| 23 | private List<Object> pages; | 23 | private List<Object> pages; |
| 24 | 24 | ||
| 25 | @JsonProperty(value = "create_at") | 25 | @JsonProperty(value = "create_at") |
| 26 | - private Date createTime = new Date(); | 26 | + private Date createTime; |
| 27 | 27 | ||
| 28 | @JsonProperty(value = "update_at") | 28 | @JsonProperty(value = "update_at") |
| 29 | private Date updateTime = new Date(); | 29 | private Date updateTime = new Date(); |
src/main/java/com/bsth/luban_springboot2/entity/Work.java
| @@ -93,4 +93,5 @@ public class Work implements Serializable { | @@ -93,4 +93,5 @@ public class Work implements Serializable { | ||
| 93 | @org.hibernate.annotations.ForeignKey(name = "none") | 93 | @org.hibernate.annotations.ForeignKey(name = "none") |
| 94 | private Set<WorkForm> workForms = new HashSet<>(); | 94 | private Set<WorkForm> workForms = new HashSet<>(); |
| 95 | 95 | ||
| 96 | + | ||
| 96 | } | 97 | } |
src/main/java/com/bsth/luban_springboot2/service/WorkService.java
| 1 | package com.bsth.luban_springboot2.service; | 1 | package com.bsth.luban_springboot2.service; |
| 2 | 2 | ||
| 3 | import com.bsth.luban_springboot2.dto.WorkDto; | 3 | import com.bsth.luban_springboot2.dto.WorkDto; |
| 4 | -import org.springframework.data.domain.Page; | ||
| 5 | import org.springframework.data.domain.Pageable; | 4 | import org.springframework.data.domain.Pageable; |
| 6 | 5 | ||
| 6 | +import java.util.List; | ||
| 7 | + | ||
| 7 | /** | 8 | /** |
| 8 | * 作品Service。 | 9 | * 作品Service。 |
| 9 | */ | 10 | */ |
| @@ -15,7 +16,7 @@ public interface WorkService { | @@ -15,7 +16,7 @@ public interface WorkService { | ||
| 15 | * @param pageable | 16 | * @param pageable |
| 16 | * @return | 17 | * @return |
| 17 | */ | 18 | */ |
| 18 | - Page<WorkDto> listWorks(WorkDto workDto, Pageable pageable); | 19 | + List<WorkDto> listWorks(WorkDto workDto, Pageable pageable); |
| 19 | 20 | ||
| 20 | /** | 21 | /** |
| 21 | * 创建work。 | 22 | * 创建work。 |
src/main/java/com/bsth/luban_springboot2/service/impl/WorkServiceImpl.java
| @@ -14,6 +14,7 @@ import org.springframework.transaction.annotation.Propagation; | @@ -14,6 +14,7 @@ import org.springframework.transaction.annotation.Propagation; | ||
| 14 | import org.springframework.transaction.annotation.Transactional; | 14 | import org.springframework.transaction.annotation.Transactional; |
| 15 | 15 | ||
| 16 | import java.util.Date; | 16 | import java.util.Date; |
| 17 | +import java.util.List; | ||
| 17 | import java.util.Optional; | 18 | import java.util.Optional; |
| 18 | 19 | ||
| 19 | /** | 20 | /** |
| @@ -25,18 +26,33 @@ public class WorkServiceImpl implements WorkService { | @@ -25,18 +26,33 @@ public class WorkServiceImpl implements WorkService { | ||
| 25 | private WorkRepo workRepo; | 26 | private WorkRepo workRepo; |
| 26 | 27 | ||
| 27 | @Override | 28 | @Override |
| 28 | - public Page<WorkDto> listWorks(WorkDto workDto, Pageable pageable) { | ||
| 29 | - // TODO:暂无业务驱动 | 29 | + public Long countWork(WorkDto workDto) { |
| 30 | + Work work = WorkDto.toWork(new Work(), workDto, false); | ||
| 31 | + Example<Work> example = Example.of(work); | ||
| 32 | + return this.workRepo.count(example); | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + @Override | ||
| 36 | + public List<WorkDto> listWorks(WorkDto workDto, Pageable pageable) { | ||
| 37 | + Work work = WorkDto.toWork(new Work(), workDto, false); | ||
| 38 | + Example<Work> example = Example.of(work); | ||
| 39 | + Page<Work> workPage = this.workRepo.findAll(example, pageable); | ||
| 40 | + Page<WorkDto> workDtoPage = workPage.map((work_source) -> { | ||
| 41 | + WorkDto workDto_convert = WorkDto.getBuilder() | ||
| 42 | + .setPropertyFromWork(work_source, false) | ||
| 43 | + .build(); | ||
| 44 | + return workDto_convert; | ||
| 45 | + }); | ||
| 30 | 46 | ||
| 31 | - return null; | 47 | + return workDtoPage.getContent(); |
| 32 | } | 48 | } |
| 33 | 49 | ||
| 34 | @Override | 50 | @Override |
| 35 | @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED) | 51 | @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED) |
| 36 | public WorkDto createWork(WorkDto workDto) { | 52 | public WorkDto createWork(WorkDto workDto) { |
| 37 | - Work work = WorkDto.toWork(workDto); | 53 | + Work work = WorkDto.toWork(new Work(), workDto, true); |
| 38 | work = this.workRepo.save(work); | 54 | work = this.workRepo.save(work); |
| 39 | - return WorkDto.getBuilder().setPropertyFromWork(work).build(); | 55 | + return WorkDto.getBuilder().setPropertyFromWork(work, false).build(); |
| 40 | } | 56 | } |
| 41 | 57 | ||
| 42 | @Override | 58 | @Override |
| @@ -47,15 +63,10 @@ public class WorkServiceImpl implements WorkService { | @@ -47,15 +63,10 @@ public class WorkServiceImpl implements WorkService { | ||
| 47 | if (work == null) { | 63 | if (work == null) { |
| 48 | return null; | 64 | return null; |
| 49 | } | 65 | } |
| 50 | - | ||
| 51 | - WorkDto updateWorkDto = WorkDto | ||
| 52 | - .getBuilder() | ||
| 53 | - .setPropertyFromWorkIgnoreNullProperties(work) | ||
| 54 | - .setUpdateTime(new Date()) | ||
| 55 | - .build(); | ||
| 56 | - Work updateWork = WorkDto.toWork(updateWorkDto); | 66 | + Work updateWork = WorkDto.toWork(work, workDto, true); |
| 67 | + updateWork.setUpdateTime(new Date()); | ||
| 57 | updateWork = this.workRepo.save(updateWork); | 68 | updateWork = this.workRepo.save(updateWork); |
| 58 | - return WorkDto.getBuilder().setPropertyFromWork(updateWork).build(); | 69 | + return WorkDto.getBuilder().setPropertyFromWork(updateWork, false).build(); |
| 59 | } | 70 | } |
| 60 | 71 | ||
| 61 | @Override | 72 | @Override |
| @@ -65,7 +76,7 @@ public class WorkServiceImpl implements WorkService { | @@ -65,7 +76,7 @@ public class WorkServiceImpl implements WorkService { | ||
| 65 | if (work == null) { | 76 | if (work == null) { |
| 66 | return null; | 77 | return null; |
| 67 | } else { | 78 | } else { |
| 68 | - return WorkDto.getBuilder().setPropertyFromWork(work).build(); | 79 | + return WorkDto.getBuilder().setPropertyFromWork(work, false).build(); |
| 69 | } | 80 | } |
| 70 | } | 81 | } |
| 71 | 82 | ||
| @@ -79,7 +90,7 @@ public class WorkServiceImpl implements WorkService { | @@ -79,7 +90,7 @@ public class WorkServiceImpl implements WorkService { | ||
| 79 | } else { | 90 | } else { |
| 80 | WorkDto workDto = WorkDto | 91 | WorkDto workDto = WorkDto |
| 81 | .getBuilder() | 92 | .getBuilder() |
| 82 | - .setPropertyFromWorkIgnoreNullProperties(work) | 93 | + .setPropertyFromWork(work, false) |
| 83 | .build(); | 94 | .build(); |
| 84 | this.workRepo.deleteById(id); | 95 | this.workRepo.deleteById(id); |
| 85 | return workDto; | 96 | return workDto; |
| @@ -98,14 +109,7 @@ public class WorkServiceImpl implements WorkService { | @@ -98,14 +109,7 @@ public class WorkServiceImpl implements WorkService { | ||
| 98 | work.setTemplate(true); | 109 | work.setTemplate(true); |
| 99 | work.setUpdateTime(new Date()); | 110 | work.setUpdateTime(new Date()); |
| 100 | work = this.workRepo.save(work); | 111 | work = this.workRepo.save(work); |
| 101 | - return WorkDto.getBuilder().setPropertyFromWork(work).build(); | ||
| 102 | - } | ||
| 103 | - | ||
| 104 | - @Override | ||
| 105 | - public Long countWork(WorkDto workDto) { | ||
| 106 | - Work work = WorkDto.toWork(workDto); | ||
| 107 | - Example<Work> example = Example.of(work); | ||
| 108 | - return this.workRepo.count(example); | 112 | + return WorkDto.getBuilder().setPropertyFromWork(work, false).build(); |
| 109 | } | 113 | } |
| 110 | 114 | ||
| 111 | @Override | 115 | @Override |
| @@ -118,13 +122,15 @@ public class WorkServiceImpl implements WorkService { | @@ -118,13 +122,15 @@ public class WorkServiceImpl implements WorkService { | ||
| 118 | } | 122 | } |
| 119 | WorkDto templateWorkDto = WorkDto | 123 | WorkDto templateWorkDto = WorkDto |
| 120 | .getBuilder() | 124 | .getBuilder() |
| 121 | - .setPropertyFromWork(work) | 125 | + .setPropertyFromWork(work, false) |
| 122 | .setId(null) | 126 | .setId(null) |
| 123 | .setTemplate(false) | 127 | .setTemplate(false) |
| 124 | .setPublish(false) | 128 | .setPublish(false) |
| 129 | + .setCreateTime(new Date()) | ||
| 130 | + .setUpdateTime(new Date()) | ||
| 125 | .build(); | 131 | .build(); |
| 126 | - Work newWork = WorkDto.toWork(templateWorkDto); | 132 | + Work newWork = WorkDto.toWork(new Work(), templateWorkDto, false); |
| 127 | newWork = this.workRepo.save(newWork); | 133 | newWork = this.workRepo.save(newWork); |
| 128 | - return WorkDto.getBuilder().setPropertyFromWork(newWork).build(); | 134 | + return WorkDto.getBuilder().setPropertyFromWork(newWork, false).build(); |
| 129 | } | 135 | } |
| 130 | } | 136 | } |
src/main/java/com/bsth/luban_springboot2/utils/MyObjectUtils.java
0 → 100644
| 1 | +package com.bsth.luban_springboot2.utils; | ||
| 2 | + | ||
| 3 | +import org.springframework.beans.BeanWrapper; | ||
| 4 | +import org.springframework.beans.BeanWrapperImpl; | ||
| 5 | + | ||
| 6 | +import java.beans.PropertyDescriptor; | ||
| 7 | +import java.util.ArrayList; | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 对象工具类。 | ||
| 12 | + */ | ||
| 13 | +public class MyObjectUtils { | ||
| 14 | + /** | ||
| 15 | + * 获取对象中属性值为null的属性名列表。 | ||
| 16 | + * @param obj | ||
| 17 | + * @return | ||
| 18 | + */ | ||
| 19 | + public static List<String> getNullValueProperties(Object obj) { | ||
| 20 | + List<String> emptyPropertyNames = new ArrayList<>(); | ||
| 21 | + final BeanWrapper src = new BeanWrapperImpl(obj); | ||
| 22 | + PropertyDescriptor[] pds = src.getPropertyDescriptors(); | ||
| 23 | + for (PropertyDescriptor pd : pds) { | ||
| 24 | + Object srcValue = src.getPropertyValue(pd.getName()); | ||
| 25 | + if (srcValue == null) { | ||
| 26 | + emptyPropertyNames.add(pd.getName()); | ||
| 27 | + } | ||
| 28 | + } | ||
| 29 | + return emptyPropertyNames; | ||
| 30 | + } | ||
| 31 | +} |
src/main/resources/logback-spring.xml
| @@ -23,11 +23,6 @@ | @@ -23,11 +23,6 @@ | ||
| 23 | <appender-ref ref="STDOUT" /> | 23 | <appender-ref ref="STDOUT" /> |
| 24 | </logger> | 24 | </logger> |
| 25 | 25 | ||
| 26 | - <logger name="com.xuxuan.hotel_service" | ||
| 27 | - level="DEBUG" additivity="false"> | ||
| 28 | - <appender-ref ref="STDOUT" /> | ||
| 29 | - </logger> | ||
| 30 | - | ||
| 31 | <root level="INFO"> | 26 | <root level="INFO"> |
| 32 | <appender-ref ref="STDOUT" /> | 27 | <appender-ref ref="STDOUT" /> |
| 33 | </root> | 28 | </root> |
src/test/java/com/bsth/luban_springboot2/LubanSpringboot2ServiceTests.java
| 1 | package com.bsth.luban_springboot2; | 1 | package com.bsth.luban_springboot2; |
| 2 | 2 | ||
| 3 | -import com.bsth.luban_springboot2.dto.request.WorkPageRequest; | 3 | +import com.bsth.luban_springboot2.dto.request.WorkQueryRequest; |
| 4 | import com.fasterxml.jackson.databind.ObjectMapper; | 4 | import com.fasterxml.jackson.databind.ObjectMapper; |
| 5 | import org.junit.jupiter.api.DisplayName; | 5 | import org.junit.jupiter.api.DisplayName; |
| 6 | import org.junit.jupiter.api.Test; | 6 | import org.junit.jupiter.api.Test; |
| @@ -34,13 +34,14 @@ class LubanSpringboot2ServiceTests extends BaseTest_junit5 { | @@ -34,13 +34,14 @@ class LubanSpringboot2ServiceTests extends BaseTest_junit5 { | ||
| 34 | @Test | 34 | @Test |
| 35 | void contextLoads() throws Exception { | 35 | void contextLoads() throws Exception { |
| 36 | // 测试@JsonProperty | 36 | // 测试@JsonProperty |
| 37 | - WorkPageRequest workPageRequest = new WorkPageRequest(); | ||
| 38 | - workPageRequest.setPage(0); | ||
| 39 | - workPageRequest.setSize(10); | ||
| 40 | - LOG.info("json={}", new ObjectMapper().writeValueAsString(workPageRequest)); | ||
| 41 | - | ||
| 42 | - String json = "{\"_start\":0,\"_limit\":10}"; | ||
| 43 | - LOG.info("object={}", new ObjectMapper().readValue(json, WorkPageRequest.class).toString()); | 37 | + WorkQueryRequest workQueryRequest = new WorkQueryRequest(); |
| 38 | + workQueryRequest.setIs_template(true); | ||
| 39 | + workQueryRequest.set_start(0); | ||
| 40 | + workQueryRequest.set_limit(10); | ||
| 41 | + LOG.info("json={}", new ObjectMapper().writeValueAsString(workQueryRequest)); | ||
| 42 | + | ||
| 43 | + String json = "{\"is_template\": true,\"_start\":0,\"_limit\":10}"; | ||
| 44 | + LOG.info("object={}", new ObjectMapper().readValue(json, WorkQueryRequest.class).toString()); | ||
| 44 | 45 | ||
| 45 | } | 46 | } |
| 46 | 47 |