为了账号安全,请及时绑定邮箱和手机立即绑定

通过注释向 graphQL java 添加自定义验证

通过注释向 graphQL java 添加自定义验证

饮歌长啸 2023-10-12 17:10:20
从网上的博客我明白了。默认情况下,将从 Java 类型推断标准 GraphQL 类型(String、Integer、Long、Float、Boolean、Enum、List)。此外,它还会尊重@javax.validation.constraints.NotNull关于值的可为空性的注释,以及@GraphQLNonNull我正在尝试一个@UUID可以验证的注释@Target(ElementType.FIELD)@Constraint(validatedBy={})@Retention(RUNTIME)@Pattern(regexp="^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$")public @interface UUID {    String message() default "{invalid.uuid}";    Class<?>[] groups() default {};    Class<? extends Payload>[] payload() default {};}public class Post {    public Post() {    }    private String id;    private String title;    @UUID    private String category;    private Author author;}当我尝试添加带有突变的帖子时,注释不起作用。请帮忙解决这个问题。
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

这里没有解析器,所以我不确定你是如何创建的,MutationResolver所以我将举一个例子并希望它有所帮助。


重要的是你需要有@Validated注释@Valid。


所以就我而言:架构:


schema {

    query: Query

    mutation: Mutation

}



type Vehicle {

    id: ID!

    name: String

}


input VehicleInput {

    name: String

    type: String

}


type Mutation {

    addVehicle(vehicle: VehicleInput): Vehicle

}

解决:


@Validated

@Component

@RequiredArgsConstructor

public class VehicleMutationResolver implements GraphQLMutationResolver {


    public Vehicle addVehicle(@Valid VehicleInput input) {

        return new Vehicle(UUID.randomUUID().toString(), input.getName());

    }

}

和输入对象:


@Data

@ToString

public class VehicleInput {


    private String type;


    @Size(min = 3)

    private String name;

}

因此,如果您提供小于 3 的字符串,您将收到错误addVehicle.input.name: size must be between 3 and 2147483647


如果这没有帮助,请提供更多数据。


查看完整回答
反对 回复 2023-10-12
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信