个人博客项目Meblog遇到的坑及解决方案

问题1:新建spring mvc项目时,添加插件报错"plugin not found".

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

解决方案

查找资料,发现指正版本号即可解决。

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--指定版本号解决问题--><version>2.2.6.RELEASE</version>
</plugin>

问题2:构造addPost添加博文方法测试出现错误

Controller中的方法如下:

@ApiOperation(value = "增加一篇文章")
@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "文章主键", required = true, dataType = "Integer"),@ApiImplicitParam(name = "title", value = "文章标题", required = true, dataType = "String"),@ApiImplicitParam(name = "summary", value = "文章简介", required = true, dataType = "String"),@ApiImplicitParam(name = "imgUrl", value = "文章题图url", required = true, dataType = "String"),@ApiImplicitParam(name = "gmtCreate", value = "创建时间", required = true, dataType = "LocalDateTime"),@ApiImplicitParam(name = "gmtModified", value = "创建时间", required = true, dataType = "LocalDateTime"),@ApiImplicitParam(name = "categories", value = "文章分类", required = true, dataType = "List<CategoryDto>"),@ApiImplicitParam(name = "tags", value = "文章标签", required = true, dataType = "List<TagDto>"),@ApiImplicitParam(name = "body", value = "文章md源码", required = true, dataType = "BodyDto")})
@PostMapping("/addPost")
//@RequestBody 利用一个对象去获取前端传过来的数据
public String addPost(@RequestBody DetailedPostDto detailedPostDto){postService.addPost(detailedPostDto);return detailedPostDto.toString();
}

错误码如下:

{"timestamp": "2020-12-20T01:48:56.202+00:00","status": 400,"error": "Bad Request",
}

解决:

原因是数据格式出现错误,测试时自动生成的gmtCreate = “2020-12-20T02:13:30.051Z” ,而后端要求的gmtCreate格式为"yyyy-MM-dd HH:mm:ss"

更正格式后,出现新的报错信息

{"timestamp": "2020-12-20T02:31:44.224+00:00","status": 500,"error": "Internal Server Error","message": "\r\n### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'gmt_modified' cannot be null\r\n### The error may exist in file"
}

检查message中的信息,发现是gmt_modified数据没有正确插入数据库中,缺失了字段,导致出错,在Service中插入数据是用set方法补充,问题解决。

每次添加博文时,需要将关联的表的信息也插入数据, 然而设计的数据库中detailPostDto的id是在插入后自增生成的,这里涉及一个问题,如何在插入的同时获取这个id呢?(关系表的数据插入需要)

这里我发现MBG工具已经帮助我实现这个功能了

在PostMapper中,使用useGeneratedKeys=“true” keyProperty="id"可以获取插入数据的id,并返回Post对象中

<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.lzw.meblog.model.Post" useGeneratedKeys="true">insert into post
</insert>

接着测试add方法,发现还是报错

{"timestamp": "2020-12-20T02:31:44.224+00:00","status": 500,"error": "Internal Server Error","message": "\r\n### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException:Cannot add or update a child row: a foreign key constraint fails (`meblog_db`.`post_category`, CONSTRAINT `post_category_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
}

在网上查找相关资料发现是测试数据中的Category信息在数据库中不存在,所以报错,修改测试数据后,成功返回。

问题3:idea所有类的使用全部带红色波浪线

解决:

有可能是没有清除原来的历史缓存,导致一些错误,解决办法是File–>Invalidate Caches,然后重启IDEA。

问题4:写addTag方法时,没有检查tag是否存在而导致重复添加:

代码如下:

public String addTag(TagDto tagDto){Tag tag = new Tag();tag.setName(tagDto.getName());tagMapper.insertSelective(tag);return "该标签成功插入";}

这里没有对tag是否已经存储在数据库中,从而导致对同一个tag重复添加。

解决方案:

这里我的思路是获取这个tag的name,然后从数据库中看有多少个这样name 的tag(虽然应该是1),检查获取的taglist是否为空,如果不为空,那么不对tag做插入,否则进行插入

修改后代码如下:

public String addTag(TagDto tagDto){//首先检查该tag是否已经存在List<Tag> tags;tags = tagMapper.selectIfExist(tagDto.getName());if (!tags.isEmpty()){//该标签已经存在,不做插入处理return "该标签已经存在,不做插入处理";}else{//没有该标签信息,新增Tag tag = new Tag();tag.setName(tagDto.getName());tagMapper.insertSelective(tag);return "该标签成功插入";}}

同时,分类也有类似的问题,对分类进行同样的修改,问题得到解决

问题5:项目启动出错

报错信息:

 Could not resolve type alias 'BaseResultMap'

经过查询资料,发现出现这个问题的原因是在写Mapper.xml时,将resultMap写成了resultType导致项目无法启动,修改后项目工程启动。

问题6:addPost方法的一些更正,关于获取的参数

代码如下:

//增加postCategory信息List<CategoryDto> categories = detailedPostDto.getCategories();for (CategoryDto categoryDto:categories) {//获取name,检查是否在数据库中存在Category category = categoryMapper.selectIfExist(categoryDto.getName());if (category==null){//不存在则新增信息category = new Category();category.setName(categoryDto.getName());categoryMapper.insertSelective(category);}categoryDto.setId(category.getId());PostCategory postCategory = new PostCategory();postCategory.setCategoryId(categoryDto.getId());postCategory.setPostId(detailedPostDto.getId());postCategoryMapper.insertSelective(postCategory);}

原本的addPost方法是假设在前端已经获取了Category的信息(id, name),即每次增加都会检查该category是否存在数据库中,但这样的方式可能会降低效率,其次也不太符合业务逻辑,因此将代码的添加category信息修改为如上形式。

这样,每次后端会将前端的分类信息(name)传入即可,对于每一个category进行判断,如果有就使用存在数据库中的数据,如果没有就插入这条数据,然后新增。

问题7:updatePost正文无法修改问题

出问题的代码如下:

     //修改body信息BodyDto bodyDto = detailedPostDto.getBody();Body body = new Body();body.setContent(bodyDto.getContent());body.setPostId(post.getId());bodyMapper.updateByPrimaryKeySelective(body);

在测试时,发现MBG生成的方法updateByPrimaryKeySelective无法正常更新,这里在Mapper中将代码做简单的修改,通过post_id进行查找更新

  <update id="updateByPostIdSelective" parameterType="com.lzw.meblog.model.Body">update body<set><if test="gmtCreate != null">gmt_create = #{gmtCreate,jdbcType=TIMESTAMP},</if><if test="gmtModified != null">gmt_modified = #{gmtModified,jdbcType=TIMESTAMP},</if><if test="postId != null">post_id = #{postId,jdbcType=INTEGER},</if><if test="content != null">content = #{content,jdbcType=LONGVARCHAR},</if></set>where post_id = #{postId,jdbcType=INTEGER}</update>

测试通过,正文能够成功修改。

个人博客项目Meblog遇到的坑及解决方案相关推荐

  1. SpringBoot+Vue博客项目中遇到的坑

    shiro整合jwt,用于用户登录逻辑流程: 登录流程: 用户登录:输入用户名和密码–>后端校验: –>有异常:处理异常 –>正常,生成jwt 访问接口时,统一被jwtFilter, ...

  2. springboot+jwt+shiro+vue+elementUI+axios+redis+mysql完成一个前后端分离的博客项目(笔记,帮填坑)

    根据B站up主MarkerHub视频制作的一个笔记 我的博客 B站博主链接: https://www.bilibili.com/video/BV1PQ4y1P7hZ?p=1 博主的开发文档: http ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客的主题切换,菜单和 ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)

    基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五) 转载于:https://github.com/Meowv/Blog 上篇文章完成了文章详情页数据查询和清除缓存 ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场

    基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场 转载于:https://github.com/Meowv/Blog.git 在程序员界,总有一批强迫 ...

  6. 实战react技术栈+express前后端博客项目(8)-- 前端管理界面标签管理+后端对应接口开发...

    项目地址:https://github.com/Nealyang/R... 本想等项目做完再连载一波系列博客,随着开发的进行,也是的确遇到了不少坑,请教了不少人.遂想,何不一边记录踩坑,一边分享收获呢 ...

  7. 实战react技术栈+express前后端博客项目(3)-- 后端路由、代理以及静态资源托管等配置说明...

    项目地址:github.com/Nealyang/Re- 本想等项目做完再连载一波系列博客,随着开发的进行,也是的确遇到了不少坑,请教了不少人.遂想,何不一边记录踩坑,一边分享收获呢.分享当然是好的, ...

  8. 基于.NetCore开发博客项目 StarBlog - (12) Razor页面动态编译

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  9. 从0到1编写个人博客项目使用springboot+vue(前后端分离) 到 购买服务器上传项目 到 GitHub开源项目、此过程下所遇问题及解决方法,至少你帮你少走70%弯路

    个人博客编写 后记 2022.12.2.4 : 30.此项目告一段落. ​ 编撰此博客本意里除去对找工作的帮助.更多地是想帮助未走过的人去探探路.总结经验.少走弯路.知识的宝贵不在于无价.而是无私.天 ...

最新文章

  1. tornado源码分析
  2. 深度学习发展简要笔记
  3. Java热部署神奇:JRebel异常之processing of -javaagent failed
  4. 2020春季学期信号与系统课堂参与信息处理
  5. ICLR 2020 | 可提速3000倍的全新信息匹配架构(附代码复现)
  6. 如何在Anaconda中实现多版本python Spyder共存
  7. mysql调优的一些方面
  8. 大数据数据科学家常用面试题_进行数据科学工作面试
  9. NVIDIA Physix Unity3D
  10. gstreamer读取USB摄像头H264帧并用rtmp推流
  11. linux shell删除所有文件夹下指定扩展名(关键字)的所有文件
  12. 在linux中,强行中断程序 kill命令
  13. 【基础】深度学习最常用的10个激活函数!(数学原理+优缺点)
  14. 有关计算机计算类教案,计算教案
  15. Android仿微信地图定位和位置选择(上)
  16. html转word 自动分页,word怎样自动分页
  17. 01、ZigBee 开发教程之进阶篇—BasicRF无线点对点传输协议
  18. 【微软算法面试高频题】可怜的小猪
  19. Freefilesync自动同步
  20. 收藏!2022年开发运维必备的10款顶级工具

热门文章

  1. ideal的tomcat 没有artifact
  2. W ndows7蓝屏0x00000024,Win7开机蓝屏错误代码0x00000024怎么解决?
  3. 中文 NLP(11) -- stanfordNLP 生成文法之 PCFG 模型
  4. 企业文件服务器备份,企业文件服务器云备份
  5. php 短信验证登录,短信验证码注册登录的实现,php接入的3种方法(附示例)
  6. 大文件 多路归并 排序
  7. java 子类调用静态方法吗_Java子父类中静态方法
  8. 输入8-16位数字和字母组成的密码
  9. 中国安全生产协会副会长徐汉才莅临百卓网络 提倡“智能+实用型”安全生产监管
  10. 笨办法学Python-----习题9_打印.打印.打印