zoukankan      html  css  js  c++  java
  • RestTemplate进行访问分页PageInfo

    废话少说,给你们看代码: 

        //provide的controller
        @ResponseBody
        @RequestMapping(value = "details",method = RequestMethod.GET)
        public PageInfo<Detail> queryByTitle(@RequestParam(required = false) String title, @RequestParam(required = false) Integer pageNum,@RequestParam(required = false) Integer pageSize){
            System.out.println("title:"+title+",pageNum:"+pageNum+",pageSize:"+pageSize);
            if (pageNum == null) {
                pageNum=1;
            }
            if (pageSize == null) {
                pageSize=2;
            }
            PageInfo<Detail> pageInfo = detailService.queryByTitle(title, pageNum, pageSize);
            return pageInfo;
        }
    

     记得加@ResponseBody注解,不然会consumer的请求会报org.springframework.web.client.HttpClientErrorException$NotFound: 404 null。

        //负责调用provider的方法,获取数据
        @Autowired
        private RestTemplate restTemplate;
        //在provider端资源的路径
        private String url="http://localhost:8080/details";
    
        //导游provider的方法查询所有用户
        public PageInfo<Detail> queryByTitle(String title,Integer pageNum,Integer pageSize){
            Map<String, Object> params = new HashMap<>();
            params.put("pageSize", pageSize);
            params.put("pageNum", pageNum);
            params.put("title", title);
            //使用占位符,map中不能没有占位符的键值对
            PageInfo pageInfo = restTemplate.getForObject(url + "?pageSize={pageSize}&pageNum={pageNum}&title={title}", PageInfo.class, params);
            //集合转json再转回来
            String json = JSON.toJSONString(pageInfo.getList());
            List<Detail> details = JSON.parseArray(json, Detail.class);
            pageInfo.setList(details);
    
            return pageInfo;
        }
    

      集合转json再转回来,这一步是个大坑啊,说起来都是泪,直接返回pageInfo,前台Thymeleaf页面也可以遍历出集合并拿到值进行展示,但怪就怪在,我Timestamp的日期不能进行格式化(<td th:text="${#dates.format(detail.createdate, 'yyyy-MM-dd HH:mm')}"></td>),我不进行格式化日期,页面可以输出,说明我的日期不是空的。但是日期不格式化也不行,报错EL1029E: A problem occurred when trying to execute method 'format' on object和Failed to convert from type [java.lang.String] to type [java.util.Date]什么的。百度中。。。  考虑是不是格式化方法不行 ,试了各种格式化方式发现还是不行,说我日期是String类型的,我寻思着搁后台遍历打印一下看看日期是不是Timestamp类型的,不遍历没啥,一遍历报错!java.util.LinkedHashMap cannot be cast to com.zhou.entity.Detail,说不能转换成我的Detail实体类 ??? ,百度。。。   (https://blog.csdn.net/shijiujiu33/article/details/93410585)返回的时候会把PageInfo转变成json的形式(内部是jackjson技术支持的)
    所以遍历集合就会报上面的异常(具体情况也不太清楚)。根据这篇博客,试了一下,发现可以遍历了,而且页面也可以格式化日期了。深坑!!!。

      如果是返回对象集合的话建议这样做:

        @Autowired
        private RestTemplate restTemplate;
        //在provider端资源的路径
        private String url="http://localhost:8080/comments";
    
        //根据新闻编号查询所有评论
        public List<Comment> queryByNewsId(Integer id){
            Comment[] comment = restTemplate.getForObject(url + "/" + id, Comment[].class);
            return Arrays.asList(comment);
        }
    

      返回对象数组,再将其转为对象集合。就不会出现上面的情况,但我是直接返回PageInfo,第一次用RestTemplate,如有大佬,还望指点一下。

  • 相关阅读:
    雷林鹏分享:XML to HTML
    雷林鹏分享:XML DOM
    雷林鹏分享:XML 编码
    雷林鹏分享: XML CDATA
    雷林鹏分享:服务器上的 XML
    雷林鹏分享:XML 注意事项
    雷林鹏分享:现实生活中的 XML
    雷林鹏分享:XML 相关技术
    雷林鹏分享:XML
    Android 系统架构图
  • 原文地址:https://www.cnblogs.com/wwct/p/12329179.html
Copyright © 2011-2022 走看看