首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Reactive验证消息

Spring Reactive验证消息
EN

Stack Overflow用户
提问于 2020-07-28 09:27:29
回答 2查看 242关注 0票数 0

大家好,我是spring boot webflux (反应式编程框架)的初学者。你有关于如何将验证消息放在错误的请求消息体中的想法吗?非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-28 09:43:53

您可以在验证传入数据的层上执行类似的操作(最好将您的功能分成多个@Service/@Component类来表示层: Rest层<->外观(验证)层<->业务逻辑层<->存储库(持久性)层):

代码语言:javascript
复制
@Autowired private UserService userService;

@Override
public Mono<UserDatabaseModel> create(@NonNull UserDatabaseModel user) {
    return validUserOrError(user)
            .flatMap(userService::save);
}
    
private Mono<UserDatabaseModel> validUserOrError(@NonNull UserDatabaseModel userDatabaseModel) {
    return (userDatabaseModel.getId() == null || userDatabaseModel.getId().isBlank())
            ? monoBadRequestError("User ID cannot be null or blank")
            : Mono.defer(() -> Mono.just(userDatabaseModel));
}

private Mono<UserDatabaseModel> monoBadRequestError(@NonNull String message) {
    return Mono.error(new ResponseStatusException(HttpStatus.BAD_REQUEST, message));
}

这样,如果用户ID无效,错误将从validUserOrError()函数和所有后续操作,如map()flatMap()等发出。将被跳过,从而导致该请求的Http错误请求错误。否则,来自服务层的结果(将用户保存到数据库)将被发送。我个人不使用spring webflux的@NotBlank注释,因为我发现它在某些情况下不兼容,而是使用我提供的结构。

票数 0
EN

Stack Overflow用户

发布于 2021-04-03 15:07:39

设置属性文件

代码语言:javascript
复制
server.error.include-message=always

并设置@ControllerAdvice

代码语言:javascript
复制
@ControllerAdvice
public class GlobalErrorHandler {

    @ExceptionHandler(WebExchangeBindException.class)
    public Mono<ServerResponse> handlerBindException(WebExchangeBindException e) {
        return Mono.error(e.getFieldError() == null ? e :
                new ResponseStatusException(HttpStatus.BAD_REQUEST,
                        e.getFieldError().getDefaultMessage()));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63125769

复制
相关文章

相似问题

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