Добавить пользовательскую проверку с помощью аннотации в GraphQL Java - PullRequest
0 голосов
/ 09 октября 2019

Из сетевых блогов, которые я понял.

По умолчанию стандартные типы GraphQL (String, Integer, Long, Float, Boolean, Enum, List) будут выведены из типов Java. Кроме того, он будет учитывать аннотацию @javax.validation.constraints.NotNull в отношении значения Nullability, а также @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 Ответ

0 голосов
/ 21 октября 2019

Здесь нет резольвера, поэтому я не уверен, как вы создаете MutationResolver, поэтому я приведу пример mu и надеюсь, что это поможет.

Важно, чтобы у вас были @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

Если это не поможет, предоставьте больше данных.

...