首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring引导将错误消息添加到rest响应中,不抛出异常但保持类型响应

Spring引导将错误消息添加到rest响应中,不抛出异常但保持类型响应
EN

Stack Overflow用户
提问于 2019-05-07 09:44:47
回答 2查看 649关注 0票数 1

我的REST端点返回ResponseEntity<SomeDto>或只返回SomeDto。由此,我产生了自吹自擂,被前端所消耗。当然,类型信息SomeDto是至关重要的。

在我的端点方法中,我正在做一些基本的检查,以防止异常发生(尽可能快地失败)。

在这种情况下返回ResponseEntity.badRequest().build()可以很好,但是我想向主体添加一条错误消息。但是,在String中添加ResponseEntity<SomeDto>是不可能的。

问题:我如何在维护签名/合同的同时添加错误消息而不需要引发异常(请参见“有效Java3版本-”项目69:只在异常情况下使用例外情况“)?

我看到的一种(糟糕)方式是向我的所有dtos添加一个错误消息字段(可以由接口指定)。

EN

回答 2

Stack Overflow用户

发布于 2019-05-07 09:57:12

您不需要向单个对象添加错误模型,而是从具有定义错误定义的基类扩展响应模型,这就是我实现它的方法。

代码语言:javascript
复制
static abstract class ApiResponse {
        enum Status {
            SUCCESS,
            FAILURE,
        }

        @Getter
        @Setter

        private Status status;
        @Getter
        @Setter
        private String errorMessage;

    }

    class NamesDto extends ApiResponse {
        @Setter
        @Getter
        String[] names;
    }

    @GetMapping(value = "namesdto")
    public ResponseEntity<ApiResponse> getNames() {
        final NamesDto namesDto = new NamesDto();
        namesDto.setStatus(ApiResponse.Status.FAILURE);
        namesDto.names = new String[]{"john", "doe"};
        return ResponseEntity.ok(namesDto);
    }


    @GetMapping(value = "errordto")
    public ResponseEntity<ApiResponse> erroDto() {
        final NamesDto namesDto = new NamesDto();
        namesDto.setErrorMessage("No names found");
        namesDto.setStatus(ApiResponse.Status.FAILURE);
        return ResponseEntity.ok(namesDto);
    }

@Getter/@Setter是从import lombok.*包导入的

票数 1
EN

Stack Overflow用户

发布于 2019-05-07 10:16:40

无论是使用ResponseEntity.badRequest().body(xxx).build()还是抛出异常都可以,只要合同是相同的。

您正在使用lib生成Swagger (例如Springfox)?嗯,在某些情况下它做得很好,但它不能创造奇迹。文档生成不应影响您编写代码的方式。在这种情况下,@ApiResponse是您所需要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56019799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档