gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:28:28 24 4
gpt4 key购买 nike

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

下面是一个例子:

@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 类:
@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 实现的:
@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。换句话说,输入字段将包含多个需要验证的字段。我希望能够验证所有字段并将所有错误组合在一起并立即将它们发送给客户端。有人请帮我吗?

最佳答案

您的验证器可以在您运行验证时将错误(字段和描述)添加到列表中,然后将其传递到最后的异常中,如果列表不为空则抛出。

关于validation - 使用解析器时如何在graphql-spring-boot中引发多个验证错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51367707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com