当前位置: 首页 > 知识库问答 >
问题:

将REST API的404响应更改为200空响应

裘安阳
2023-03-14

我有一个用Java编写的Spring Boot应用程序,它是一个REST API。该服务(Svc A)调用REST API服务(Svc B),该服务也是用Java编写的Spring Boot应用程序。当没有找到数据时,Svc B返回404状态码。我需要将此响应更改为200状态代码,并返回一个空响应对象。我不确定是否或如何做到这一点。

我可以捕捉错误,并确定404是否是这个没有数据发现的错误。但是,我不知道如何将响应更改为200空响应。我正在使用FeignClient调用服务。这是捕获404的错误代码:

@Component
public class FeignErrorDecoder implements ErrorDecoder {

    Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public Exception decode(String methodKey, Response response) {
        Reader reader = null;
        String messageText = null;
        switch (response.status()){
            case 400:
                logger.error("Status code " + response.status() + ", methodKey = " + methodKey);
            case 404:
            {
                logger.error("Error took place when using Feign client to send HTTP Request. Status code " + response.status() + ", methodKey = " + methodKey);
                try {
                    reader = response.body().asReader();
                    //Easy way to read the stream and get a String object
                    String result = CharStreams.toString(reader);
                    logger.error("RESPONSE BODY: " + result);
                    ObjectMapper mapper = new ObjectMapper();
                    //just in case you missed an attribute in the Pojo
                    mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
                    //init the Pojo
                    ExceptionMessage exceptionMessage = mapper.readValue(result,
                            ExceptionMessage.class);

                    messageText = exceptionMessage.getMessage();
                    logger.info("message: " + messageText);

                } catch(IOException ex) {
                    logger.error(ex.getMessage());
                }
                finally {
                    try {

                        if (reader != null)
                            reader.close();

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                return new ResponseStatusException(HttpStatus.valueOf(200), messageText);
            }
            default:
                return new Exception(response.reason());
        }
    }
}
{
   "statusCd" : "200",
   "message" : "The Location not found for given Location Number and Facility Type Code",
   "detailDesc" : "The Location not found for given Location Number and Facility Type Code. Error Timestamp : 2020-01-31 18:19:13"
}
{
  "facilityNumber": "923",
  "facilityTimeZone": null,
  "facilityAbbr": null,
  "scheduledOperations": []
}

共有1个答案

太叔京
2023-03-14

在404的情况下,只需尝试

return new ResponseStatusException(HttpStatus.valueOf(200));
 类似资料:
  • 问题内容: 什么是空指针异常(),什么原因导致它们? 可以使用哪些方法/工具确定原因,以阻止异常导致程序过早终止? 问题答案: 声明引用变量(即对象)时,实际上是在创建指向对象的指针。考虑以下代码,您在其中声明基本类型的变量: 在此示例中,变量是an ,Java会为您初始化它。在第二行为其分配值时,您的值将写入所指的存储位置。 但是,当您尝试声明引用 类型时 ,会发生一些不同的事情。采取以下代码:

  • 我想在spring boot中,当响应对象对于每个响应自动为null时返回404。 我需要建议。 我不想检查控制器中的对象是否为null。

  • 我的项目中有一个非常简单的SpringWebFlux restendpoint。 endpoint只需使用提供的用户名回复即可。 我面临的问题是响应体是空的,应该是用户名,我还验证了当我返回硬编码字符串时,它通过了,当我依赖

  • 我正在从服务器下载文件。我用排球来做。 这是我的代码 以下是错误侦听器的错误消息在一些弱网络连接上,我收到以下逻辑消息 我不明白失败的原因是什么,因为大多数错误消息都返回null。我很确定这是因为请求超时,我知道如何增加超时,但是我应该在错误侦听器中编写什么代码,以便在出现错误时获得正确的错误消息。

  • 我正在尝试调用FlickR API,但由于response.body()返回null而遇到困难。 我不确定它是否与我的JSON/POJO映射相关,但我无法弄清楚当我调用Flickr时如何访问来自改版的响应。我知道我的调用已经成功完成,因为我实际上能够通过日志拦截器查看JSON。 型号: 活动 }

  • 但是我总是在方法中获得响应。因此,我尝试使用查看响应的错误主体。错误正文包含与原始响应完全相同的内容。 我用控制了response,看看我是否修改了我的响应类wright,它似乎可以。 为什么改型无法转换我的响应? 更新