【wiki知识库】02.wiki知识库SpringBoot后端的准备 您所在的位置:网站首页 wiki式的知识软件工具 【wiki知识库】02.wiki知识库SpringBoot后端的准备

【wiki知识库】02.wiki知识库SpringBoot后端的准备

2024-06-06 13:25| 来源: 网络整理| 查看: 265

我们需要的都已经写完了,接下来就去实现具体的功能,在这之前呢,我还需要写两个Param类,这两个类的作用就是接收前端给后端传输的一些参数。

PageParam

@Data public class PageParam { @NotNull(message = "【页码】不能为空") private Integer page; @NotNull(message = "【每页条数】不能为空") @Max(value = 1000, message = "【每页条数】不能超过1000") private Integer size; }

EbookQueryParam

@EqualsAndHashCode(callSuper = true) @Data public class EbookQueryParam extends PageParam { private Long id; private String name; private Long categoryId2; }

除了这两个Param外还需要两个VO,VO的作用就是把我们的查询结果进行一个二次封装,然后在传给前端,比如说你开发登录功能,用户成功登陆后,你不能把用户的密码直接返回给前端,而是要把这个密码的字段删掉在返回给前端。

PageVo

@Data public class PageVo { private long total; private List list; }

EbookQueryVo 

@Data public class EbookQueryVo { private Long id; private String name; private Long category1Id; private Long category2Id; private String description; private String cover; private Integer docCount; private Integer viewCount; private Integer voteCount; }

打开我们的EbookController,写入以下代码。

@RestController @RequestMapping("/ebook") public class EbookController { @Resource EbookService ebookService; /** * 查询电子书 带有模糊查询 * @param ebookQueryParam 带有数据校验 * @return */ @RequestMapping("/list") public CommonResp list(@Validated EbookQueryParam ebookQueryParam){ PageVo list = ebookService.list(ebookQueryParam); return new CommonResp(true,"查找成功",list); } }

EbookService代码如下。

public interface EbookService extends IService { PageVo list(EbookQueryParam ebookQueryParam); }

 EbookMapper代码如下。

/** *

* 电子书 Mapper 接口 *

* * @author CSDN__哈 * @since 2024-05-26 */ public interface EbookMapper extends BaseMapper { }

 EbookServiceImpl代码如下。

package com.my.hawiki.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.my.hawiki.domain.Ebook; import com.my.hawiki.mapper.EbookMapper; import com.my.hawiki.param.EbookQueryParam; import com.my.hawiki.service.EbookService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.my.hawiki.utils.CopyUtil; import com.my.hawiki.vo.EbookQueryVo; import com.my.hawiki.vo.PageVo; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; /** *

* 电子书 服务实现类 *

* * @author CSDN__哈 * @since 2024-05-26 */ @Service public class EbookServiceImpl extends ServiceImpl implements EbookService { @Resource EbookMapper ebookMapper; @Override public PageVo list(EbookQueryParam ebookQueryParam) { // 这里创建了一个wrapper用于sql语句条件的拼接 LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); // 拼接我们传过来的id 就相当于 where id = ?? lambdaQueryWrapper.eq(ebookQueryParam.getId()!=null,Ebook::getId,ebookQueryParam.getId()) // 相当于 where categoryid2 = ?? .eq(ebookQueryParam.getCategoryId2()!=null,Ebook::getCategory2Id,ebookQueryParam.getCategoryId2()) // 相当于 where name like %???% .like(StringUtils.isNotBlank(ebookQueryParam.getName()),Ebook::getName,ebookQueryParam.getName()); // 这里使用MybataisPlus的page类,接收一下前端传来了页号和页的大小 Page page = new Page(ebookQueryParam.getPage(),ebookQueryParam.getSize()); // 这里我们将从数据库中查询的结果封装到一个Page类下 Page resultPage = ebookMapper.selectPage(page, lambdaQueryWrapper); // 这里我创建了一个PageVo,用于返回给前端信息 PageVo pageVo = new PageVo(); List list = new ArrayList(); // 从resultPage中获取从数据库中去除的结果,然后把数据插入到list中 for (Ebook record : resultPage.getRecords()) { EbookQueryVo ebookQueryVo = CopyUtil.copy(record, EbookQueryVo.class); list.add(ebookQueryVo); } pageVo.setList(list); pageVo.setTotal(resultPage.getSize()); return pageVo; } }

好了这里就写的差不多了,我们可以使用PostMan工具测试一下,这里大家需要自己安装一下。

启动我们的启动类,并且在启动类上加上一个mapper扫描。之后启动项目

@MapperScan("com.my.hawiki.mapper")

 可以看到我传入的page是1,size是5,查询出来的结果没问题。

但大家别忘了,我还有一个数据校验呢,page和size不能为空。那我们什么也不传入试一试。现在直接查不出来了。

我们看一下后台日志。这里给我们报了个错,说明我们的数据校验是有作用的,那我不想让他报错,这我该怎么做呢?我还想使用CommomResp返回一个信息,告诉前端错误是什么。

54.346 WARN o.s.w.s.m.s.DefaultHandlerExceptionResolver:208 http-nio-8080-exec-7 Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errorsField error in object 'ebookQueryParam' on field 'page': rejected value [null]; codes [NotNull.ebookQueryParam.page,NotNull.page,NotNull.java.lang.Integer,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [ebookQueryParam.page,page]; arguments []; default message [page]]; default message [【页码】不能为空]Field error in object 'ebookQueryParam' on field 'size': rejected value [null]; codes [NotNull.ebookQueryParam.size,NotNull.size,NotNull.java.lang.Integer,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [ebookQueryParam.size,size]; arguments []; default message [size]]; default message [【每页条数】不能为空]]

 这里我就要创建一个handler包,包下创建一个GlobalExceptionHandler。

GlobalExceptionHandler代码如下。这个类的作用就是捕获我们程序中的异常,然后作出处理。

import com.my.hawiki.utils.CommonResp; import org.springframework.validation.BindException; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class GlobalExceptionHandler { /** * 校验异常 */ @ExceptionHandler(BindException.class) public CommonResp handleBindException(BindException e) { StringBuilder errorMessage = new StringBuilder(); for (FieldError fieldError : e.getFieldErrors()) { // 这里可以自定义错误信息的格式 errorMessage.append(fieldError.getField()).append(":").append(fieldError.getDefaultMessage()).append("; "); } // 去掉最后一个分号和空格 if (errorMessage.length() > 0) { errorMessage.setLength(errorMessage.length() - 2); } return new CommonResp(false, errorMessage.toString(), null); } }

接下来在重新启动项目试试看。

大功告成, 电子书查询接口的功能已经测试成功了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有