这次完成对新闻发布时间进行归档的操作
主要就是根据年份信息选出属于不同年份的新闻。
另外就是使对错误的显示更友好
1 归档
2 dao层接口
第一个是选出属于同一组的日期,第二个是根据日期选出
@Query("select function('date_format',n.updateTime,'%Y') as year from News n group by year order by year desc ")
List<String> findGroupYear();
@Query("select n from News n where function('date_format',n.updateTime,'%Y') =?1")
List<News> findByYear(String year);
3 服务层方法
首先获取属于各个年份的年份列表,然后根据年份查找各个年份更新的新闻存入map中。另外一个是返回所有的文章总数。
@Override
public Map<String, List<News>> archiveNew() {
List<String> years=newRepository.findGroupYear();
Map<String,List<News>> map=new LinkedHashMap<>();
for(String year:years){
map.put(year,newRepository.findByYear(year));
System.out.println(year);
}
return map;
}
@Override
public Long countNew() {
return newRepository.count();
}
4 web层方法
将service层查询到的数据传送给前端进行展示。
@Controller
public class ArchiveShowController {
@Autowired NewService newService;
@GetMapping("/archives")
public String archive(Model model){
model.addAttribute("archiveMap",newService.archiveNew());
model.addAttribute("newsCount",newService.countNew());
return "archives";
}
}
5 页面
<th:block th:each="item : ${archiveMap}">
<h3 class="ui center aligned header" th:text="${item.key}">2017</h3>
<div class="ui fluid vertical menu">
<a href="#" th:href="@{/news/{id}(id=${news.id})}" target="_blank" class="item" th:each="news : ${item.value}">
<span>
<i class="mini teal circle icon"></i><span th:text="${news.title}">关于刻意练习的清单</span>
<div class="ui teal basic left pointing label m-padded-mini " th:text="${#dates.format(news.updateTime,'MMMdd')}">9月03</div>
</span>
<div class="ui orange basic left pointing label m-padded-mini " th:text="${news.flag}">原创</div>
</a>
6 效果演示
可以选出年份,而且可以显示具体日期
2 错误页面
写一个Controller来接收一个错误,返回错误页面。
@ControllerAdvice
public class ControllerExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView exceptionHandler(HttpServletRequest request,Exception e) throws Exception {
if(AnnotationUtils.findAnnotation(e.getClass(),ResponseStatus.class)!=null){
throw e;
}
ModelAndView mv=new ModelAndView();
mv.addObject("url",request.getRequestURI());
mv.addObject("exception",e);
mv.setViewName("error/error");
return mv;
}
}