若依AjaxResult的get(AjaxResult.CODE_TAG)有时返回的200,有时返回的字符串“200“

这个项目是多模块项目,之前通过web json格式,多模块之前传输用的RestTemplate,但是对接其它系统时要用XML就添加了XML的依赖。

原来

原来ajaxResult.get(AjaxResult.CODE_TAG).equals(200 )能返回true,

现在get(AjaxResult.CODE_TAG).equals(200 )返回false。

现在

现在get(AjaxResult.CODE_TAG).equals(200 )返回false。

现在get(AjaxResult.CODE_TAG).equals("200" )返回true,很奇怪,必须得用字符串。

配置RestTemplate

java 复制代码
@Configuration
public class AppConfig {
    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();

        // 确保添加了正确的HttpMessageConverter
        List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
        messageConverters.add(new MappingJackson2HttpMessageConverter());
        restTemplate.setMessageConverters(messageConverters);

        return restTemplate;
    }
}

配置后恢复正常了。

问题解析

添加XML依赖后,可能改变了RestTemplate默认的消息转换器(HttpMessageConverter)的行为或顺序。当你的服务接收到响应后,如果没有适当的配置,RestTemplate可能使用不适当的转换器处理响应数据,导致数据类型的差异。

  1. 原始行为:在添加XML依赖之前,可能MappingJackson2HttpMessageConverter(处理JSON)是默认的转换器,它将数字200(来自JSON响应)直接转换成Java中的Integer类型。
  2. 变化后的行为:添加XML依赖后,可能引入了额外的转换器(如处理XML的转换器),这可能影响了响应的解析方式。如果RestTemplate默认使用了一个将所有数字视为字符串的转换器,那么即使响应体中是数字200,它也可能被解析为字符串"200"。

解决方案

在AppConfig中显式设置了RestTemplate的消息转换器,只添加了MappingJackson2HttpMessageConverter。这确保了不论XML依赖如何,解析JSON时都将使用这个转换器。这个转换器将正确地将JSON中的数字200解析为Java的Integer,从而get(AjaxResult.CODE_TAG).equals(200)返回true。

相关推荐
qq_12498707531 小时前
基于springboot的竞赛团队组建与管理系统的设计与实现(源码+论文+部署+安装)
java·vue.js·spring boot·后端·信息可视化·毕业设计·计算机毕业设计
瑞雪兆丰年兮1 小时前
[从0开始学Java|第五天]Java循环高级综合练习
java·开发语言
清铎1 小时前
项目_Agent实战
开发语言·人工智能·深度学习·算法·机器学习
BoJerry7772 小时前
数据结构——单链表(不带头)【C】
c语言·开发语言·数据结构
J_liaty2 小时前
SpringBoot 自定义注解实现接口加解密:一套完整的多算法方案
java·spring boot·算法
m0_748708052 小时前
C++代码移植性设计
开发语言·c++·算法
Dr.Kun2 小时前
【鲲码园PsychoPy】Go/No-go范式
开发语言·后端·golang
郝学胜-神的一滴2 小时前
Linux Socket模型创建流程详解
linux·服务器·开发语言·网络·c++·程序人生
zhengfei6112 小时前
踪有趣的 Linux(和 UNIX)恶意软件。提交 PR
java·数据库·mysql
「QT(C++)开发工程师」2 小时前
C++ 观察者模式
java·c++·观察者模式