• 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,如有大佬,还望指点一下。

  • 相关阅读:
    安装VMtools vim编辑器的使用 压缩包命令 Linux下的用户管理 (第三天)
    VM虚拟机安装 常用Linux命令 网卡配置 (第二天)
    数据库的交互模式 常用的dos命令 (第一天)
    Validate US Telephone Numbers FreeCodeCamp
    Arguments Optional FreeCodeCamp
    Everything Be True FreeCodeCamp
    Binary Agents FreeCodeCamp
    Steamroller FreeCodeCamp
    Drop it FreeCodeCamp
    Smallest Common Multiple FreeCodeCamp
  • 原文地址:https://www.cnblogs.com/wwct/p/12329179.html
Copyright © 2020-2023  润新知