中软国际实训十:SpringBoot项目——主页信息展示+详情页
2020-07-31 20:03
120 查看
中软国际实训八:SpringBoot项目——主页信息展示+详情页
1.项目结构更新
2.新闻首页与详情页
2.1 更新方法类与实现
NewService
//主页显示新闻列表 Page<News> listNew(Pageable pageable); //主页推荐最新新闻列表 List<News> listRecommendNewTop(Integer size); //全局搜索 Page<News> listNew(String query,Pageable pageable); News getAndConvert(Long id);
NewServiceImpl
@Override public Page<News> listNew(Pageable pageable) { return newRepository.findAll(pageable); } @Override public List<News> listRecommendNewTop(Integer size) { Sort sort = Sort.by(Sort.Direction.DESC,"updateTime"); Pageable pageable = PageRequest.of(0,size,sort); return newRepository.findTop(pageable); } @Override public Page<News> listNew(String query, Pageable pageable) { return newRepository.findByQuery(query,pageable); } @Override public News getAndConvert(Long id) { News news = newRepository.findById(id).orElse(null); if (news==null){ System.out.println("该新闻不存在"); } News news1 = new News(); BeanUtils.copyProperties(news,news1); String content = news1.getContent(); news1.setContent(MarkdownUtils.markdownToHtmlExtensions(content)); return news1; }
TagService
List<Tag> listTag(String ids); List<Tag> listTagTop(Integer size);
TagServiceImpl
@Override public List<Tag> listTagTop(Integer size) { Sort sort = Sort.by(Sort.Direction.DESC,"newsList.size"); Pageable pageable = PageRequest.of(0,size,sort); return tagRepository.findTop(pageable); } private List<Long> convertToList(String ids){ System.out.println("service接收的ida为:"+ids); List<Long> list = new ArrayList<>(); if (!"".equals(ids) && ids!=null){ String[] idArray = ids.split(","); for (int i=0;i<idArray.length;i++){ list.add(new Long(idArray[i])); } } System.out.println("service中处理完成后的id list"+list); return list; }
TypeService
List<Type> listTypeTop(Integer size);
TypeServiceImpl
@Override public List<Type> listTypeTop(Integer size) { Sort sort = Sort.by(Sort.Direction.DESC,"news.size"); Pageable pageable = PageRequest.of(0,size,sort); return typeRepository.findTop(pageable);
2.2 添加工具类
util.MarkdownUtils
package com.zr0726.news.util; import org.commonmark.Extension; import org.commonmark.ext.gfm.tables.TableBlock; import org.commonmark.ext.gfm.tables.TablesExtension; import org.commonmark.ext.heading.anchor.HeadingAnchorExtension; import org.commonmark.node.Link; import org.commonmark.node.Node; import org.commonmark.parser.Parser; import org.commonmark.renderer.html.AttributeProvider; import org.commonmark.renderer.html.AttributeProviderContext; import org.commonmark.renderer.html.AttributeProviderFactory; import org.commonmark.renderer.html.HtmlRenderer; import java.util.*; public class MarkdownUtils { /** * markdown格式转换成HTML格式 * @param markdown * @return */ public static String markdownToHtml(String markdown) { Parser parser = Parser.builder().build(); Node document = parser.parse(markdown); HtmlRenderer renderer = HtmlRenderer.builder().build(); return renderer.render(document); } /** * 增加扩展[标题锚点,表格生成] * Markdown转换成HTML * @param markdown * @return */ public static String markdownToHtmlExtensions(String markdown) { //h标题生成id Set<Extension> headingAnchorExtensions = Collections.singleton(HeadingAnchorExtension.create()); //转换table的HTML List<Extension> tableExtension = Arrays.asList(TablesExtension.create()); Parser parser = Parser.builder() .extensions(tableExtension) .build(); Node document = parser.parse(markdown); HtmlRenderer renderer = HtmlRenderer.builder() .extensions(headingAnchorExtensions) .extensions(tableExtension) .attributeProviderFactory(new AttributeProviderFactory() { public AttributeProvider create(AttributeProviderContext context) { return new CustomAttributeProvider(); } }) .build(); return renderer.render(document); } /** * 处理标签的属性 */ static class CustomAttributeProvider implements AttributeProvider { @Override public void setAttributes(Node node, String tagName, Map<String, String> attributes) { //改变a标签的target属性为_blank if (node instanceof Link) { attributes.put("target", "_blank"); } if (node instanceof TableBlock) { attributes.put("class", "ui celled table"); } } } public static void main(String[] args) { String table = "| hello | hi | 哈哈哈 |\n" + "| ----- | ---- | ----- |\n" + "| 斯维尔多 | 士大夫 | f啊 |\n" + "| 阿什顿发 | 非固定杆 | 撒阿什顿发 |\n" + "\n"; String a = "[imCoding 爱编程](http://www.lirenmi.cn)"; System.out.println(markdownToHtmlExtensions(a)); } }
2.3 新闻页控制类
IndexController
package com.zr0726.news.web; import com.zr0726.news.service.NewService; import com.zr0726.news.service.TagService; import com.zr0726.news.service.TypeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; @Controller public class IndexController { @Autowired private TypeService typeService; @Autowired private TagService tagService; @Autowired private NewService newService; @GetMapping("/") public String index(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC) Pageable pageable, Model model){ model.addAttribute("page",newService.listNew(pageable)); model.addAttribute("types",typeService.listTypeTop(3)); model.addAttribute("tags",tagService.listTagTop(3)); model.addAttribute("recommendNews",newService.listRecommendNewTop(3)); return "index"; } @PostMapping("/search") public String search(@PageableDefault(size = 3,sort = {"update"},direction = Sort.Direction.DESC) Pageable pageable,@RequestParam String query,Model model){ model.addAttribute("page",newService.listNew("%"+query+"%",pageable)); model.addAttribute("query",query); return "search"; } @RequestMapping("/news/{id}") public String news(@PathVariable Long id,Model model){ model.addAttribute("news",newService.getAndConvert(id)); return "new"; } }
3. 功能测试
相关文章推荐
- 中软国际实训十一:SpringBoot项目——评论+分类、标签页面实现
- 【个人学习】使用idea搭建SpringBoot,整合Mybatis、Thymeleaf,连接数据库,实现具有前端界面项目:主要功能登录,注册,个人信息查看、更改,不定时更新中...
- 基于SpringBoot从零构建博客网站 - 开发设置主页标识和修改个人信息功能
- [springboot 开发单体web shop] 8. 商品详情&评价展示
- SpringBoot整合Redis缓存主页信息
- 基于SpringBoot从零构建博客网站 - 开发设置主页标识和修改个人信息功能
- 在springboot项目中service层获取当前用户信息
- Spring Boot + MyBatis 电商项目 -04- 使用 Spring MVC 读取用户信息、筛选字段
- 【SpringBoot商城秒杀系统项目实战19】秒杀静态化+订单详情静态化
- springboot——新闻列表主页显示和新闻详情页
- 使用SwaggerSpringBootStarter展示web项目api接口
- SpringBoot入门小项目 springboot+mybatis+mysql+thymeleaf实现数据库操作并展示数据
- springboot项目使用@Value注解获取配置文件中的配置信息
- 项目实训——初用springboot
- SpringBoot项目基于JWT网络信息传输标准实现单点登录案例以及与传统Session认证的优缺点分析
- 【Spring Boot自学笔记一】项目搭建+Hello World+主页配置
- spring boot新闻详情页面展示
- Springboot项目图片展示
- Spring boot项目中展示HTML页面效果
- 【SpringBoot商城秒杀系统项目实战15】订单详情页