Spring使用RestTemplate返回的嵌套实体对象为空,转换json报错

项目场景:

Spring Boot项目使用RestTemplate调用接口,使用嵌套实体对象接收的返回结果

实体对象TokenUser,其中TokenUserInfo是嵌套的对象:

@Data
public class TokenUser {private Integer code;private TokenUserInfo data;private Boolean success;
}
@Data
public class TokenUserInfo {/*** 用户id*/private String userId;/*** 用户名*/private String userName;}

 使用RestTemplate调用接口

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);HttpEntity<String> formEntity= new HttpEntity<>(requestJson, headers);TokenUser tokenUser = null;
try {tokenUser = restTemplate.postForObject(url, formEntity, TokenUser.class);
} catch (Exception e) {logger.error("调用接口出错: ", e);
}

问题描述

Spring Boot项目使用RestTemplate调用接口,使用嵌套实体对象接收的返回结果

返回的嵌套对象为null不会有问题

{"data": null,"success": true,"code": 200
}

但是返回的嵌套对象是''空字符串就会报错

{"data": "","success": true,"code": 200
}

报错详情:

Error while extracting response for type [class com.test.dto.TokenUser] and content type [application/json;charset=UTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.test.dto.TokenUserInfo` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value (''); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.test.dto.TokenUserInfo` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('')at [Source: (PushbackInputStream); line: 1, column: 55] (through reference chain: com.test.dto.TokenUser["data"])

原因分析:

        简单来说就是 json转化成对象失败了,失败的原因是TokenUserInfo对象中虽然有一个构造器,却是全参构造器或是无参构造器,就是缺少一个只有一个String类型参数的构造器,导致在解析 ' ' 空字符串时失败了。


解决方案:

第一种:实体类加上String类型参数的构造器

同时加上@NoArgsConstructor, @AllArgsConstructor 注解,提供无参数的构造函数和全参数的构造函数

@Data
@NoArgsConstructor
@AllArgsConstructor
public class TokenUserInfo {/*** 防止返回值是空字符串,用string来接收*/public TokenUserInfo(String userId){this.userId = userId;}/*** 用户id*/private String userId;/*** 用户名*/private String userName;}

第二种:用String接收返回结果,再转json对象

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);HttpEntity<String> formEntity= new HttpEntity<>(requestJson, headers);TokenUser tokenUser = null;
try {String jsonResult = restTemplate.postForObject(url, formEntity, String.class);JSONObject userJson = JSON.parseObject(jsonResult);tokenUser = JSONObject.toJavaObject(userJson, TokenUser.class);
} catch (Exception e) {logger.error("调用接口出错: ", e);
}

我这里用的是alibaba的包

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.44</version>
</dependency>

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

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

相关文章

类和对象(1)(至尊详解版)

相信对于大家而言&#xff0c;对于类和对象都会是一头雾水吧&#xff01;什么是类&#xff1f;或者你有对象吗&#xff1f;那么本期的内容呢&#xff1f;就由我来为大家再次增加对于它们的理解&#xff0c;由于水平上的原因&#xff0c;可能会存在不当之处&#xff0c;敬请读者…

C#双向链表:只用泛型节点类ListNode<T>设计的最短小的双向链表包含初始化链表数据和遍历链表各节点

目录 一、涉及到的知识点&#xff1a; 1.ListNode 类使用自动属性设计 2. 泛型节点类设计的误区 二、仅仅定义泛型节点类&#xff0c;实现最短的双向链表 一、涉及到的知识点&#xff1a; 1.ListNode 类使用自动属性设计 public class ListNode {public object Object { …

类与对象(三)--static成员、友元

文章目录 1.static成员1.1概念&#x1f3a7;面试题✒️1.2static的特性&#x1f3a7;1.3思考&#x1f3a7; 2.友元2.1什么是友元&#xff1f;&#x1f3a7;2.2两种友元关系&#xff1a;&#x1f3a7; 1.static成员 1.1概念&#x1f3a7; &#x1f50e; static关键字用于声明类…

Jmeter性能测试 -1

之前讲的Jmeter算不上是性能测试&#xff0c;只是用Jmeter做接口测试。现在我们开始进入实际的性能测试。开始前你应该对Jmeter有了一定的了解&#xff0c;把前面Jmeter内容看一遍应该可以入门了。 Jmeter与locust locust除了可以做接口的性能测试以外&#xff0c;做性能测试…

MongoDB和Mysql区别与各自优缺点

最近使用数据库来做大模型Chat记录和后续的数据处理&#xff0c;对比mysql和mongodb&#xff0c;整理如下&#xff1a; 数据库mysqlmongoDB介绍- MySQL 是一款安全、跨平台、高效的&#xff0c;并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 My…

ubuntu18.04编译OpenCV-3.4.19+OpenCV_contrib-3.4.19

首先确保安装了cmake工具 安装opencv依赖文件 sudo apt-get install build-essential sudo apt-get install git libgtk-3-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev li…

树莓派(Raspberry Pi)常见的各种引脚介绍

本文将为您详细讲解树莓派&#xff08;Raspberry Pi&#xff09;常见的各种引脚&#xff0c;以及它们的特点、区别和优势。树莓派是一款非常受欢迎的单板计算机&#xff0c;它拥有多个 GPIO&#xff08;通用输入输出&#xff09;引脚&#xff0c;这些引脚可以用于各种电子项目和…

Java中的基本数据类型有哪些

在Java编程语言中&#xff0c;基本数据类型&#xff08;Primitive Types&#xff09;是预定义的数据类型&#xff0c;它们不是由用户定义的类创建的&#xff0c;而是由语言本身提供的。这些基本数据类型是构成Java程序的基础&#xff0c;用于存储不同类型的值&#xff0c;如整数…

【C++】C++模板基础知识篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化…

LeetCode刷题--- 单词拆分

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动态规划算法…

金智维售前总监屈文浩,将出席“ISIG-RPA超级自动化产业发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;RPA中国、AIGC开放社区、LowCode低码时代&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索R…

mysql笔记:5. 运算符

文章目录 算术运算符比较运算符等于运算符安全等于运算符NULL值判断LIKE运算符 逻辑运算符位运算符运算符的优先级 在MySQL中&#xff0c;运算符是指在执行特定算术或逻辑操作时用到的符号。常用的运算符有算术运算符、比较运算符、逻辑运算符、位运算符等。 算术运算符 算术运…

配置类 + @Bean定义第三方组件

1. 问题描述 我们可以通过注解Component、Controller、Service、Repository将自己的创建的类添加到IOC容器中&#xff0c;交由IOC管理。但第三方jar包的类&#xff0c;无法使用Component等相关注解添加到IOC容器中&#xff0c;因为源码jar包内容为只读模式&#xff0c;我们不可…

问题:前端获取long型数值精度丢失,后面几位都为0

文章目录 问题分析解决 问题 通过接口获取到的数据和 Postman 获取到的数据不一样&#xff0c;仔细看 data 的第17位之后 分析 该字段类型是long类型问题&#xff1a;前端接收到数据后&#xff0c;发现精度丢失&#xff0c;当返回的结果超过17位的时候&#xff0c;后面的全…

磁性材料的基本特性

1. 磁性材料的磁化曲线 磁性材料是由铁磁性物质或亚铁磁性物质组成的&#xff0c;在外加磁场H 作用下&#xff0c;必有相应的磁化强度M 或磁感应强度B&#xff0c;它们随磁场强度H 的变化曲线称为磁化曲线&#xff08;M&#xff5e;H或B&#xff5e;H曲线&#xff09;。磁化曲…

通知:T3学员领取资料391-395

各位T3学员∶本周VBA技术资料增加391-395讲&#xff0c;看到通知后联络我&#xff08;微&#xff1a;VBA6337&#xff09;免费领取资料。成果来之不易&#xff0c;您更新后请说声谢谢&#xff0c;感恩我的成果。 MF391&#xff1a;选择同颜色的单元格 MF392&#xff1a;连接范…

图文并茂的讲清楚Linux零拷贝技术

今天我们来聊一聊Linux零拷贝技术&#xff0c;今天我们以一个比较有代表性的技术sendfile系统调用为切入点&#xff0c;详细介绍一下零拷贝技术的原理。 1.零拷贝技术简介 Linux零拷贝技术是一种优化数据传输的技术&#xff0c;它可以减少数据在内核态和用户态之间的拷贝次数&…

Ubuntu 22.04 server 安装GNOME/XFCE/KDE桌面环境

在Ubuntu Server上安装桌面环境可以通过以下步骤完成&#xff1a; 安装前请确保您已经在/etc/apt/sources.list 文件中启用了Universe和Multiverse软件库。 首先&#xff0c;通过SSH或物理访问方式登录到Ubuntu Server。 确保系统处于最新状态&#xff0c;运行以下命令进行更…

图论入门题题解

✨欢迎来到脑子不好的小菜鸟的文章✨ &#x1f388;创作不易&#xff0c;麻烦点点赞哦&#x1f388; 所属专栏&#xff1a;刷题_脑子不好的小菜鸟的博客-CSDN博客 我的主页&#xff1a;脑子不好的小菜鸟 文章特点&#xff1a;关键点和步骤讲解放在 代码相应位置 拓扑排序 / 家谱…

蓝桥杯(3.8)

调试 System.exit(0);1205. 买不到的数目 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();System.out.println((n-1)*(m-1)-1);} }1211. 蚂蚁感冒 im…