使用Spring框架自带对象,0入侵统一正常或异常接口对象返回

本文介绍了如何在SpringWeb项目中,通过@RestControllerAdvice和ResponseBodyAdvice实现异常拦截和统一返回值处理,包括自定义异常类如ErrorResponse和BusinessException,以提供标准化的接口返回格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

公司的一个项目,没有统一接口返回值。前端对接接口时,由于不同接口返回对象的千差万别,导致抽象处理接口返回结果很复杂。
有的公司,会新增一个统一返回对象,每一个接口,都返回这个对象。这样是可以实现的,很多公司也是这么做的,但是对代码有一定的入侵性。
这里用另一个思路来实现:

  • 程序异常返回时,通过异常拦截,捕捉异常来构造统一返回对象
  • 程序正常返回时,自定义返回值处理器来实现统一处理返回值的功能。

对于一个新手来说,接口返回值很随意,下面这样写接口是很常见的:


    @RequestMapping("getAll")
    public List<GoodJobEveryDay> getAll() throws JsonProcessingException {
   

        List<GoodJobEveryDay> value = new ArrayList<>();
        // 判断文件是否存在
        if (FileHandling.isFileExists(FileHandling.FILE_NAME)) {
   
            // 如果文件存在,读取文件内容
            String fileContent = FileHandling.readFileContent(FileHandling.FILE_NAME);
            value = objectMapper.readValue(fileContent, new TypeReference<List<GoodJobEveryDay>>() {
   
            });
        }
        return value;
    }


    @GetMapping("getOne")
    public GoodJobEveryDay getOne(@RequestParam Integer id) throws JsonProcessingException {
   
        List<GoodJobEveryDay> value = getAll();
        if (!CollectionUtils.isEmpty(value)) {
   
            if (value.stream().filter(it -> id.equals(it.getId())).count() <= 0) {
   
                throw new BusinessException(ExceptionEnum.DATA_NOT_FOUND);
            }
            Optional<GoodJobEveryDay> first = value.stream().filter(it -> it.getId().equals(id)).findFirst();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值