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

@Configuration
public class AppConfig {
    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();

        // 确保添加了正确的HttpMessageConverter
        List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
        messageConverters.add
AjaxResult info = remoteTenantService.getInfo(tenantId);远程调用拿到了info,package com.xfzx.common.core.web.domain; import com.xfzx.common.core.constant.HttpStatus; import com.xfzx.common.core.utils.StringUtils; import java.util.HashMap; import java.util.Objects; /** * 操作消息提醒 * * @author project-init */ public class AjaxResult extends HashMap<String, Object> { /** * 状态码 */ public static final String CODE_TAG = "code"; /** * 返回内容 */ public static final String MSG_TAG = "msg"; /** * 数据对象 */ public static final String DATA_TAG = "data"; private static final long serialVersionUID = 1L; /** * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。 */ public AjaxResult() { } /** * 初始化一个新创建的 AjaxResult 对象 * * @param code 状态码 * @param msg 返回内容 */ public AjaxResult(int code, String msg) { super.put(CODE_TAG, code); super.put(MSG_TAG, msg); } /** * 初始化一个新创建的 AjaxResult 对象 * * @param code 状态码 * @param msg 返回内容 * @param data 数据对象 */ public AjaxResult(int code, String msg, Object data) { super.put(CODE_TAG, code); super.put(MSG_TAG, msg); if (StringUtils.isNotNull(data)) { super.put(DATA_TAG, data); } } /** * 返回成功消息 * * @return 成功消息 */ public static AjaxResult success() { return AjaxResult.success("操作成功"); } /** * 返回成功数据 * * @return 成功消息 */ public static AjaxResult success(Object data) { return AjaxResult.success("操作成功", data); } /** * 返回成功消息 * * @param msg 返回内容 * @return 成功消息 */ public static AjaxResult success(String msg) { return AjaxResult.success(msg, null); } /** * 返回成功消息 * * @param msg 返回内容 * @param data 数据对象 * @return 成功消息 */ public static AjaxResult success(String msg, Object data) { return new AjaxResult(HttpStatus.SUCCESS, msg, data); } /** * 返回警告消息 * * @param msg 返回内容 * @return 警告消息 */ public static AjaxResult warn(String msg) { return AjaxResult.warn(msg, null); } /** * 返回警告消息 * * @param msg 返回内容 * @param data 数据对象 * @return 警告消息 */ public static AjaxResult warn(String msg, Object data) { return new AjaxResult(HttpStatus.WARN, msg, data); } /** * 返回错误消息 * * @return 错误消息 */ public static AjaxResult error() { return AjaxResult.error("操作失败"); } /** * 返回错误消息 * * @param msg 返回内容 * @return 错误消息 */ public static AjaxResult error(String msg) { return AjaxResult.error(msg, null); } /** * 返回错误消息 * * @param msg 返回内容 * @param data 数据对象 * @return 错误消息 */ public static AjaxResult error(String msg, Object data) { return new AjaxResult(HttpStatus.ERROR, msg, data); } /** * 返回错误消息 * * @param code 状态码 * @param msg 返回内容 * @return 错误消息 */ public static AjaxResult error(int code, String msg) { return new AjaxResult(code, msg, null); } /** * 是否为成功消息 * * @return 结果 */ public boolean isSuccess() { return Objects.equals(HttpStatus.SUCCESS, this.get(CODE_TAG)); } /** * 是否为警告消息 * * @return 结果 */ public boolean isWarn() { return Objects.equals(HttpStatus.WARN, this.get(CODE_TAG)); } /** * 是否为错误消息 * * @return 结果 */ public boolean isError() { return Objects.equals(HttpStatus.ERROR, this.get(CODE_TAG)); } /** * 方便链式调用 * * @param key * @param value * @return */ @Override public AjaxResult put(String key, Object value) { super.put(key, value); return this; } } 我怎么把code和msg和data拿到
最新发布
04-03
<think>嗯,用户想从AjaxResult对象里获取code、msg和data。首先,我需要回忆一下AjaxResult的结构。根据提供的代码,AjaxResult继承自HashMap,所以应该用get方法通过键来取值。 用户给出的类中定义了三个常量:CODE_TAG是"code",MSG_TAG是"msg",DATA_TAG是"data"。所以直接用这些键来获取对应的值。比如,info.get("code")就能拿到状态码,不过要注意类型转换,因为返回的是Object类型,可能需要转为Integer或者String。 不过用户提供的类里,AjaxResult的构造方法在存入code时用的是int类型,比如HttpStatus.SUCCESS应该是个整数。所以code应该是Integer类型,而msg是String,data是Object,可能是各种类型,比如另一个对象或者集合。 另外,用户代码中有一些工具方法,比如isSuccess(),可以用来判断是否成功。不过用户的问题是如何取出这三个字段的值,所以直接使用get方法即可。需要注意data可能为null,或者不存在的情况,比如当data未被设置时,info.get("data")返回null。 用户可能是在远程调用后得到了AjaxResult对象,需要处理不同的情况,比如成功时提取data,失败时处理错误信息。所以建议用户先检查code,再处理data,避免空指针异常。 总结步骤:使用get方法获取各个键对应的值,注意类型转换,并处理可能为null的情况。同时可以利用AjaxResult提供的isSuccess等方法来判断状态,简化代码。</think>我们可以通过以下步骤从AjaxResult对象中提取code、msg、data三个核心字段: 一、基础取值方法(直接通过HashMap接口) ```java // 获取状态码(需强制类型转换) int code = (Integer) info.get(AjaxResult.CODE_TAG); // 获取消息描述(需强制类型转换) String msg = (String) info.get(AjaxResult.MSG_TAG); // 获取业务数据(可能为null,类型取决于接口实现) Object data = info.get(AjaxResult.DATA_TAG); ``` 二、推荐安全写法(结合工具方法) ```java // 1. 获取状态码(推荐使用自动拆箱) int statusCode = (int) info.getOrDefault(AjaxResult.CODE_TAG, HttpStatus.ERROR); // 2. 获取消息(空安全处理) String message = StringUtils.defaultString((String) info.get(AjaxResult.MSG_TAG)); // 3. 获取数据(带类型检查) if(info.containsKey(AjaxResult.DATA_TAG)){ YourDataType dataObj = (YourDataType) info.get(AjaxResult.DATA_TAG); } ``` 三、状态判断建议 ```java // 使用内置状态判断方法更安全 if(info.isSuccess()) { // 成功时处理data TenantInfo tenant = (TenantInfo) info.get(AjaxResult.DATA_TAG); } else if(info.isError()) { // 错误时处理msg log.error("请求失败,原因:{}", info.get(AjaxResult.MSG_TAG)); } ``` 四、完整示例代码 ```java AjaxResult info = remoteTenantService.getInfo(tenantId); // 安全取值流程 int code = (int) info.getOrDefault(AjaxResult.CODE_TAG, HttpStatus.ERROR); String msg = (String) info.getOrDefault(AjaxResult.MSG_TAG, "未知错误"); if(info.isSuccess()) { // 类型安全转换 if(info.get(AjaxResult.DATA_TAG) instanceof TenantInfo) { TenantInfo tenant = (TenantInfo) info.get(AjaxResult.DATA_TAG); // 处理租户信息... } else { log.warn("返回数据类型异常"); } } else { log.error("请求失败,错误码:{},错误信息:{}", code, msg); } ``` 注意事项: 1. 强制类型转换前建议使用`instanceof`做类型检查 2. `DATA_TAG`可能为null,建议先做空值判断 3. 推荐优先使用`isSuccess()`等内置状态判断方法 4. 如果使用Spring框架,可考虑使用`@JsonIgnore`注解增强序列化安全性 通过上述方法,可以安全可靠地从AjaxResult对象中提取所需数据字段。建议结合业务场景封装工具类,提高代码复用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值