个人博客项目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. 你分库分表的姿势对么?——详谈水平分库分表
  2. PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获(下)
  3. c语言p1-melepeo,学生选课系统c语言程序代码
  4. angular2 组件交互
  5. 【ValueError: Target is multiclass but average=‘binary‘. Please choose another average setting, one 】
  6. 读jQuery之二十(Deferred对象)
  7. redis 安装并设置为开机启动服务
  8. mysql8.0 创建用户并授权
  9. 关于es6中新增的一些方法----数组篇
  10. 2021-08-04 WHERE条件查询
  11. php大马的使用教程,一php大马,值得研究
  12. windows terminal使用管理员权限打开
  13. 迅雷链基于智能硬件的DPoA共识机制介绍
  14. 玩转Luat——导读
  15. 计算机精准教学,运用“精准教学”进行信息技术教学的过程性评价
  16. 文字语义纠错技术探索与实践-张健
  17. 使用python Basemap测站分布图(含站名)
  18. 如何搭建Jenkins导出Unity安卓环境
  19. C++编程练习:计算长方体体积、对象数组求学生成绩最高者、销售应用问题、重载复数加法运算
  20. remote: Support for password authentication was removed on August 13, 2021.

热门文章

  1. 标题点击复制文本(点击复制微信号 跳转微信)
  2. 小车,测走过的距离,计算走过的时间,stc8a8k
  3. 使用python的requests库爬取微信公众号文章中的图片
  4. QQ超市最优路径寻路研究
  5. 授之以渔-运维平台发布模块四(Jenkins Pipeline+Saltstack改造篇)
  6. Scratch与C++
  7. MFC 关于MoveWindow函数的问题
  8. 一个小白对auth的理解
  9. Java关键字有哪些?
  10. 【网络工程】6、防火墙介绍及配置实操