You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React中处理API返回的Collections.singletonMap格式响应

问题描述

我需要在调用API更新实体的subscribed_status属性时,在React中正确判断后端返回的响应状态。Java后端通过Collections.singletonMap返回两种格式的响应:

  • {response: 'FAILURE'}
  • {response: 'SUCCESS'}

当前尝试的条件判断因为res.data不是字符串而失效,比如下面的写法无法正常工作:

// 条件不生效,因为data不是字符串
if(res.data==='FAILURE'){
     // 执行某些操作
}

后端API实现代码:

@PatchMapping("/updateSubscribedStatus/{email}")
public Map<String, String> updateSubscribedStatus(@PathVariable String email) throws AlreadySubscribedException {
    try{
        Boolean updateStatus=userService.updateSubscribedStatus(email);
        if(updateStatus){
            return Collections.singletonMap("response", "SUCCESS");
        }
        return Collections.singletonMap("response", "FAILURE");
    }catch(Exception alreadySubscribedException){
        return Collections.singletonMap("response", "FAILURE");
    }
}

前端使用axios调用API的代码,希望收到{response: 'FAILURE'}时执行指定函数,但当前条件判断无效:

export const updateSubscribedStatus=(email:string,setSubscribedStatus:(subscribedStatus:boolean)=>void,toggleShowAlreadySubscribedError:()=>void)=>{
axios.patch(`http://localhost:8080/user/updateSubscribedStatus/${email}`)
    .then((res)=>{
        console.log(res.data);
        setSubscribedStatus(true);
        // 这里的if语句无法正常工作
        if(res.data.toString()==="FAILURE"){
            toggleShowAlreadySubscribedError();
        }
    }).catch((error)=>{
        console.log(error);
        setSubscribedStatus(false);
})}
解决方案

问题核心是你没有正确访问响应对象的response字段——res.data是包含response属性的对象,并非字符串,直接和字符串对比或调用toString()都无法得到正确结果。

修改前端条件判断逻辑,直接访问res.data.response来判断状态,同时调整订阅状态的设置逻辑(原代码无论成功失败都先设为true,不符合业务逻辑):

export const updateSubscribedStatus=(email:string,setSubscribedStatus:(subscribedStatus:boolean)=>void,toggleShowAlreadySubscribedError:()=>void)=>{
axios.patch(`http://localhost:8080/user/updateSubscribedStatus/${email}`)
    .then((res)=>{
        console.log(res.data);
        // 根据响应结果分支处理
        if(res.data.response === "FAILURE"){
            toggleShowAlreadySubscribedError();
            setSubscribedStatus(false);
        } else {
            setSubscribedStatus(true);
        }
    }).catch((error)=>{
        console.log(error);
        setSubscribedStatus(false);
})}

内容的提问来源于stack exchange,提问作者Ben Chu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:15:37