openFeign 调用后 返回 出现 application/json 错误

项目场景:

远程调用时返回json格式错误

项目场景:从分页插件式改换为原生分页的时候 通过openFeign调用时发现了问题


问题描述

不需要openFeign 调用的时候 返回的数据和格式是对 通过openFeign 调用后返回 出现 application/json 错误 :

org.springframework.web.client.RestClientException: Error while extracting response for type [cn.cws.framework.core.datasource.util.CwsPage<cn.cws.fulimall.vo.bill.backstage.OrderEntryListVo>] and content type [application/json]

原因分析:

远程调用后 转换为json格式传输时 错误:

  1. JSON 结构与 Java 对象不匹配
  2. RestTemplate 配置问题
  3. 使用正确的类型引用进行 REST 调用
  4. JSON 字段校验
    通过以上的步骤 发现问题出现在这个类 CwsPage 少了一个 setList() 方法
package cn.cws.framework.core.datasource.util;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import lombok.ToString;import java.util.List;
import java.util.function.Function;import static java.util.stream.Collectors.toList;@ToString
@ApiModel(value = "CwsPage",description = "分页返回数据含分页相关数据")
public class CwsPage<T> extends Page<T> {public CwsPage() {super();}public CwsPage(long current, long size) {super(current, size);}public CwsPage(long current, long size, long total) {super(current, size, total);}public CwsPage(long current, long size, boolean searchCount) {super(current, size, searchCount);}public CwsPage(long current, long size, long total, boolean searchCount) {super(current, size, total, searchCount);}@Deprecated@JsonIgnorepublic long getCurrent() {return this.current;}@Deprecated@JsonIgnorepublic long getSize() {return this.size;}@Deprecated@JsonIgnorepublic List<T> getRecords() {return this.records;}/*** 兼容前端旧数据,现在使用getCurrent* @return*/public Long getPageNum() {return super.getCurrent();}/*** 兼容前端旧数据,现在使用getSize* @return*/public Long getPageSize() {return super.getSize();}/*** 兼容前端旧数据,现在使用getRecords* @return*/public List<T> getList() {return super.getRecords();}public Boolean getLastPage() {return super.getPages() == super.getCurrent();}public Boolean getHasNextPage() {return super.getPages() > super.getCurrent();}public CwsPage<T> setRecords(List<T> records) {this.records = records;return this;}public <R> CwsPage<R> convert(Function<? super T, ? extends R> mapper) {List<R> collect = this.getList().stream().map(mapper).collect(toList());return ((CwsPage<R>) this).setRecords(collect);}}

解决方案:

通过上面原因分析4步骤 把json 进行解析 发现出问题:

package cn.cws.framework.core.datasource.util;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import lombok.ToString;import java.util.List;
import java.util.function.Function;import static java.util.stream.Collectors.toList;@ToString
@ApiModel(value = "CwsPage",description = "分页返回数据含分页相关数据")
public class CwsPage<T> extends Page<T> {public CwsPage() {super();}public CwsPage(long current, long size) {super(current, size);}public CwsPage(long current, long size, long total) {super(current, size, total);}public CwsPage(long current, long size, boolean searchCount) {super(current, size, searchCount);}public CwsPage(long current, long size, long total, boolean searchCount) {super(current, size, total, searchCount);}@Deprecated@JsonIgnorepublic long getCurrent() {return this.current;}@Deprecated@JsonIgnorepublic long getSize() {return this.size;}@Deprecated@JsonIgnorepublic List<T> getRecords() {return this.records;}public void setList(List<T> list){this.records = list;}/*** 兼容前端旧数据,现在使用getCurrent* @return*/public Long getPageNum() {return super.getCurrent();}/*** 兼容前端旧数据,现在使用getSize* @return*/public Long getPageSize() {return super.getSize();}/*** 兼容前端旧数据,现在使用getRecords* @return*/public List<T> getList() {return super.getRecords();}public Boolean getLastPage() {return super.getPages() == super.getCurrent();}public Boolean getHasNextPage() {return super.getPages() > super.getCurrent();}public CwsPage<T> setRecords(List<T> records) {this.records = records;return this;}public <R> CwsPage<R> convert(Function<? super T, ? extends R> mapper) {List<R> collect = this.getList().stream().map(mapper).collect(toList());return ((CwsPage<R>) this).setRecords(collect);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5万字带你一文看懂自动驾驶之高精度地图前世今生

在讲解高精度地图之前&#xff0c;我们先把定位这个事情弄清楚&#xff0c;想明白&#xff0c;后面的事情就会清晰很多&#xff0c;自古哲学里面讨论的人生终极问题&#xff0c;无非就三个&#xff0c;我是谁&#xff0c;我从哪里来&#xff0c;我要去哪里&#xff0c;这里的位…

构建智慧设施管理平台:数字化引领未来建筑行业发展

随着城市化进程的不断推进和建筑行业的持续发展&#xff0c;智慧设施管理平台的重要性日益凸显。在这一背景下&#xff0c;构建智慧设施管理平台成为推动建筑行业数字化转型的关键举措。本文将深入探讨智慧设施管理平台的构建与优势&#xff0c;助力建筑企业把握数字化转型的主…

头歌实践教学平台——Python程序设计之语言基础

1.1 四则运算(project) 整数四则运算 """ 试编程实现分两行输入两个非零整数&#xff0c;并在4 行中按顺序输出两个数的加、减、乘、除的计算结果。 要求输出与如下示例格式相同&#xff0c;符号前后各有一个空格。 """#输入整数变量a和b&#x…

7-139 有趣的括号

括号()的组合千奇百怪,Drizzle 想知道各种组合的括号可以是否合法 合法要求:每个同类型的左括号必须有与之对应的同类的右括号以正确的顺序闭合 要求: 输入:输入一个括号字符串 输出:输出是否合法,是则True,否则False 示例: 输入: (){}[]输出: True范围: 对于 1…

html+js光标操作

光标设置id为username的字段 window.addEventListener("load", function() {document.getElementById("username").focus(); }); 光标在username的时候点击enter回车键的时候光标移动到id为password的input里面 document.getElementById("username…

【从零开始学架构 架构基础】二 架构设计的复杂度来源:高性能复杂度来源

架构设计的复杂度来源其实就是架构设计要解决的问题&#xff0c;主要有如下几个&#xff1a;高性能、高可用、可扩展、低成本、安全、规模。复杂度的关键&#xff0c;就是新旧技术之间不是完全的替代关系&#xff0c;有交叉&#xff0c;有各自的特点&#xff0c;所以才需要具体…

always on 可用行分析及部署操作

一、Always On 可用性分析 Always On 是 SQL Server 提供的一种高可用性和灾难恢复解决方案。它通过允许数据库在多个 SQL Server 实例之间自动故障转移,从而确保业务的连续性。以下是对 Always On 的可用性分析: 高可用性:Always On 通过创建可用性组,将数据库同步到多个…

openEuler 22.03安装单机版oracle 19c(附录所有patch包)

客户要在OpenEuler 22.0.3 LTS上安装的19.3.0.0 ,在安装到11%的时候报错all_no_orcl错误,我们知道欧拉底层是rhel9,这些错误其实经常接触都知道肯定是各种软件包的版本不对导致的,但是各种依赖太多了也不好解决,最后在官网有所发现: Requirements for Installing Oracle Datab…

Python数据类型转换:打通进销存数据处理的通道!

在Python中&#xff0c;数据类型转换是将一个数据类型的值转换为另一种数据类型的过程。Python提供了丰富的内置函数来实现不同数据类型之间的转换&#xff0c;包括整数、浮点数、字符串、列表、元组、集合和字典等。 基本语法 数据类型转换的基本语法是使用内置函数进行转换…

第八十二章 将 Web 应用程序与远程 Web 服务器结合使用 - 访问多个 IRIS 服务器上的 CSP

文章目录 第八十二章 将 Web 应用程序与远程 Web 服务器结合使用 - 访问多个 IRIS 服务器上的 CSP为应用程序路径配置 IRIS 服务器更改 URL 中的 IRIS 服务器名称 第八十二章 将 Web 应用程序与远程 Web 服务器结合使用 - 访问多个 IRIS 服务器上的 CSP 如果需要配置一台 Web …

【文末附gpt升级方案】探讨当前时机是否适合进入AIGC行业(一)

随着科技的飞速发展&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;作为新兴的技术领域&#xff0c;正逐步走进公众的视野&#xff0c;并在多个行业展现出巨大的应用潜力。然而&#xff0c;对于创业者、投资者以及希望进入这一领域的专业人士来说&#xff0c;当前时…

2024新零售行业多元化用工报告

来源&#xff1a;君润人力 近期历史回顾&#xff1a;

小米15曝光?可能会要稍微涨价

也许是感受到了智能机市场的逐渐复苏&#xff0c;最近各大手机品牌发售新品的速度明显加快了。从4月份的Redmi、一加&#xff0c;再到5月份一大堆vivo、OPPO新机型的发布。而近日&#xff0c;有关小米14即将发售的消息也是悄咪咪的放了出来。 去年发售的小米14可以说是狠狠地让…

202012青少年软件编程(Python)等级考试试卷(三级)

第 1 题 【单选题】 在Python正则表达式中&#xff0c;用来匹配任意空白字符的是&#xff08; &#xff09;。 A &#x1f612; B :S C :d D &#x1f604; 正确答案:A 试题解析: 第 2 题 【单选题】 在Python正则表达式中&#xff0c;用来匹配任意非数字字符的是&…

双向RNN和双向LSTM

双向RNN和双向LSTM 一、双向循环神经网络BiRNN 1、为什么要用BiRNN 双向RNN&#xff0c;即可以从过去的时间点获取记忆&#xff0c;又可以从未来的时间点获取信息,也就是说具有以下两个特点&#xff1a; 捕捉前后文信息&#xff1a;传统的单向 RNN 只能利用先前的上下文信息…

vue3+ts(<script setup lang=“ts“>)刷新页面后保持下拉框选中效果

效果图&#xff1a; 代码&#xff1a; <template><div class"app-layout"><div class"app-box"><div class"header"><div class"header-left"></div><div class"title">室外智…

<template>标签的作用是什么?<slot>标签的作用是什么?

<template> 和 <slot> 都是 Vue.js 框架中用于模板编程的标签&#xff0c;但它们在功能和应用场景上有所不同。 1. <template> 标签的作用 <template> 标签在 Vue.js 中用作一种声明性的方式来定义模板的片段。但它本身不会被渲染到最终的 DOM 中。&…

scratch列表排序 2024年3月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch列表排序 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、p…

Python函数之旅专栏(导航)

Python内置函数(参考版本:3.11.8)AELRabs( )enumerate( )len( )range( )aiter( )eval( )list( )repr( )all( )exec( )locals( )reversed( )anext( )round( )any( ) ascii( )FM  filter( )map( )S float( )max( )set( )Bformat( )memoryview( )setattr( )bin( )frozenset( )…

《sklearn 基础教程:开启机器学习的奇妙之旅》

在当今数据驱动的世界中&#xff0c;机器学习已成为一项至关重要的技术。而 sklearn 作为机器学习领域的翘楚&#xff0c;为我们提供了强大的工具和方法。让我们一起深入了解 sklearn 的基础教程&#xff0c;探索其奥秘吧&#xff01; 一、初识 sklearn sklearn 是一个功能齐…