若依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。

相关推荐
卷毛的技术笔记16 分钟前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥17 分钟前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog18 分钟前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb20081126 分钟前
FastAPI APIRouter
开发语言·python
Benszen28 分钟前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆29 分钟前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木32 分钟前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r37 分钟前
Java调用链MCP分析工具
java·python·ai编程
杨充1 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~1 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言