首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用解析器时在graphql-spring-boot中引发多个验证错误?

如何在使用解析器时在graphql-spring-boot中引发多个验证错误?
EN

Stack Overflow用户
提问于 2018-07-17 02:03:18
回答 0查看 2.3K关注 0票数 7

我正在使用graphql-spring-boot库,并使用解析器对象来解析输入查询的值。

下面是一个例子:

代码语言:javascript
复制
@Component
public class BookResolver implements GraphQLQueryResolver {

    @Autowired
    private BookImpl bookImpl;

    @Autowired
    private GraphqlValidator validator;

    public GetBookOutput getBooks(GetBookQuery getBookQuery) {  

        validator.validateBookInputQuery(getBookQuery);

        GetBookOutput output = bookImpl.getBook(getBookQuery)

        return output;
    }
}

在上面的代码中,我希望验证getBookQuery,并在发送给客户端的响应中引发自定义错误。输入getBookQuery类型包含一个数字字符串。

下面是我是如何实现GraphqlValidator类的:

代码语言:javascript
复制
@Component
public class GraphqlValidator {

    private static final String BOOK_NUMBER_REGEX = " *[0-9]+( *, *[0-9]+)* *";

    public void validateBookInputQuery(GetBookInputQuery getBookInputQuery) {
        String bookNumber = getBookInputQuery.getBookNumber();

        if (!isValidValueForRefVal(bookNumber, BOOK_NUMBER_REGEX)) {
            throw new GraphqlInvalidFieldException("Input type getBookInputQuery Invalid", "bookNumber", bookNumber);
        }
    }
}

在validateBookInputQuery函数内部,我抛出了一个异常,它是从GraphQLError实现的:

代码语言:javascript
复制
@SuppressWarnings("serial")
public class GraphqlInvalidFieldException extends RuntimeException implements GraphQLError{

    private Map<String, Object> extensions = new HashMap<>();
    String message;

    public GraphqlInvalidFieldException(String message, String fieldname, String arg) {
        //super(message);
        this.message = message;
        extensions.put(fieldname, arg);
    }

    @Override
    public List<SourceLocation> getLocations() {
        return null;
    }

    @Override
    public Map<String, Object> getExtensions() {
        return extensions;
    }

    @Override
    public ErrorType getErrorType() {
        return null;
    }

    @Override 
    public String getMessage() {
        return message;
    }

}

通过这样做,我能够验证单个字段并将自定义错误消息发送到客户端。但是,在更复杂的场景中,输入类型GetBookQuery不仅包含bookNumber,还包含bookName和Author。换句话说,输入字段将包含多个需要验证的字段。我希望能够验证所有字段,并将所有错误分组在一起,并立即将它们发送到客户端。有谁能帮我一下吗?

EN

回答

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

https://stackoverflow.com/questions/51367707

复制
相关文章

相似问题

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