rains-graphql-java-extended основан на graphql-java. [springboot], для улучшения схемы graphql были сделаны расширения. Основные расширения включают в себя пользовательские типы и пользовательские директивы.
Пользовательские типы
Пользовательские директивы
java.util.Date, java.time.LocalDate, java.time.LocalDateTime
Формат | JSON String |
---|---|
yyyy-MM-dd HH:mm:ss.SSS | 2017-07-09 13:14:45.94 |
java.time.LocalTime
Формат | JSON String |
---|---|
HH:mm:ss.SSS | 17:59:59.129 |
HH:mm:ss | 17:59:59 |
HH:mm | 17:59 |
scalar TreeNode
type Tree {
id: ID
parentId: ID
name: String
children: TreeNode
}
input Application {
name : String @Size(max : 100)
}
extend type Query {
hired (applications : [Application!] @Size(max : 3 )) : Boolean
}
Добавьте graphql-extended-spring-boot-starter
в ваш проект.
Добавьте следующее в ваш pom.xml
:
<dependency>
<groupId>com.rains.graphql</groupId>
<artifactId>graphql-extended-spring-boot-starter</artifactId>
<version>2.10.5</version>
</dependency>
Добавьте следующее в ваш build.gradle
:
compile 'com.rains.graphql:graphql-extended-spring-boot-starter:2.10.5'
Добавьте следующие скаляры в ваш файл схемы .graphqls
:
# Реализация java.util.Date
scalar Date
# Реализация java.time.LocalDate
scalar LocalDate
# Реализация java.time.LocalDateTime
scalar LocalDateTime
# Реализация java.time.LocalTime
scalar LocalTime
# Реализация java.time.OffsetDateTime
scalar OffsetDateTime
# Тип для представления дерева
scalar TreeNode
directive @Size(min : Int = 0, max : Int = 2147483647, message : String = "Длина должна быть между min и max")
on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
Вы можете переименовать скаляры, добавив следующие свойства в application.yaml
:
graphql:
datetime:
scalars:
date:
scalarName: MyDate
pattern: yyyy-MM-dd HH:mm:ss
localDate:
scalarName: MyLocalDate
```### Пример использования директив валидации
### @AssertFalse
Значение типа `Boolean` должно быть `false`.
- Пример: `updateDriver(isDrunk: Boolean @AssertFalse): DriverDetails`
- Применяется к: `Boolean`
- SDL: `directive @AssertFalse(message: String = "graphql.validation.AssertFalse.message") on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение: `graphql.validation.AssertFalse.message`
### @AssertTrue
Значение типа `Boolean` должно быть `true`.
- Пример: `driveCar(hasLicence: Boolean @AssertTrue): DriverDetails`
- Применяется к: `Boolean`
- SDL: `directive @AssertTrue(message: String = "graphql.validation.AssertTrue.message") on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение: `graphql.validation.AssertTrue.message`
### @DecimalMax
Элемент должен быть числом, значение которого должно быть меньше или равно указанному максимуму.
- Пример: `driveCar(bloodAlcoholLevel: Float @DecimalMax(value: "0.05")): DriverDetails`
- Применяется к: `String`, `Byte`, `Short`, `Int`, `Long`, `BigDecimal`, `BigInteger`, `Float`
- SDL: `directive @DecimalMax(value: String!, including: Boolean! = true, message: String = "graphql.validation.DecimalMax.message") on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение: `graphql.validation.DecimalMax.message`
### @DecimalMin
Элемент должен быть числом, значение которого должно быть больше или равно указанному минимальному значению.
- Пример: `driveCar(carHorsePower: Float @DecimalMin(value: "300.50")): DriverDetails`
- Применяется к: `String`, `Byte`, `Short`, `Int`, `Long`, `BigDecimal`, `BigInteger`, `Float`
- SDL: `directive @DecimalMin(value: String!, including: Boolean! = true, message: String = "graphql.validation.DecimalMin.message") on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение: `graphql.validation.DecimalMin.message`- Сообщение : `graphql.validation.DecimalMin.message`
### @Digits
Элемент должен быть числом, значение которого должно находиться в указанном диапазоне целых и дробных частей.
- Пример : `buyCar(carCost: Float @Digits(целая: 5, дробная: 2): DriverDetails)`
- Применяется к : `Строка`, `Байт`, `Короткий`, `Целое`, `Длинное`, `BigDecimal`, `BigInteger`, `Float`
- SDL : `предусловие @Digits(целая: Целое!, дробная: Целое!, сообщение: Строка = "graphql.validation.Digits.message") на ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение : `graphql.validation.Digits.message`
### @Expression
Предоставленное выражение должно оцениваться как true. Язык выражений — <a href="https://javaee.github.io/tutorial/jsf-el001.html">Java EL</a>, и выражения должны разрешаться к логическому значению, то есть оно является валидным или нет.
- Пример : `drivers(first: Целое, after: Строка!, last: Целое, before: Строка) : DriverConnection @Expression(значение: "${args.containsOneOf('first', 'last')}")`
- Применяется к : `Все типы и скаляры`
- SDL : `предусловие @Expression(значение: Строка!, сообщение: Строка = "graphql.validation.Expression.message") на FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение : `graphql.validation.Expression.message`
### @Max
Элемент должен быть числом, значение которого должно быть меньше или равно указанному максимальному значению.
- Пример : `driveCar(horsePower: Float @Max(значение: 1000): DriverDetails)`
- Применяется к : `Байт`, `Короткий`, `Целое`, `Длинное`, `BigDecimal`, `BigInteger`, `Float`
- SDL : `предусловие @Max(значение: Целое! = 2147483647, сообщение: Строка = "graphql.validation.Max.message") на ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение : `graphql.validation.Max.message`### @Min
Элемент должен быть числом, значение которого должно быть больше или равно указанному минимальному значению.
- Пример : `driveCar( age : Int @Min(value : 18) : DriverDetails`
- Применяется к : `Byte`, `Short`, `Int`, `Long`, `BigDecimal`, `BigInteger`, `Float`
- SDL : `реквизит @Min(value : Int! = 0, message : String = "значение должно быть больше или равно указанному минимальному значению") на ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение : `graphql.validation.Min.message`
### @Negative
Элемент должен быть отрицательным числом.
- Пример : `driveCar( lostLicencePoints : Int @Negative) : DriverDetails`
- Применяется к : `Byte`, `Short`, `Int`, `Long`, `BigDecimal`, `BigInteger`, `Float`
- SDL : `реквизит @Negative(message : String = "значение должно быть отрицательным числом") на ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение : `graphql.validation.Negative.message`
### @NegativeOrZero
Элемент должен быть отрицательным числом или нулем.
- Пример : `driveCar( lostLicencePoints : Int @NegativeOrZero) : DriverDetails`
- Применяется к : `Byte`, `Short`, `Int`, `Long`, `BigDecimal`, `BigInteger`, `Float`
- SDL : `реквизит @NegativeOrZero(message : String = "значение должно быть отрицательным числом или нулем") на ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение : `graphql.validation.NegativeOrZero.message`
### @NotBlank
Строка должна содержать хотя бы один символ, отличный от пробельных символов, согласно Java's Character.isWhitespace().
- Пример : `updateAccident( accidentNotes : String @NotBlank) : DriverDetails`
- Применяется к : `String`
- SDL : `реквизит @NotBlank(message : String = "строка должна содержать хотя бы один символ, отличный от пробельных символов") на ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение : `graphql.validation.NotBlank.message`
### @NotEmpty
Элемент должен иметь ненулевой размер.
- Пример : `updateAccident( accidentNotes : [Notes]! @NotEmpty) : DriverDetails`- Применяется к: `String`, `Lists`, `Input Objects`
- SDL: `реквизит @NotEmpty(message : String = "graphql.validation.NotEmpty.message") на ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение: `graphql.validation.NotEmpty.message`
### @Pattern
Строка должна соответствовать указанному регулярному выражению, которое следует стандартам Java для регулярных выражений.
- Пример: `updateDriver(plateNumber : String @Pattern(regex : "[A-Z][A-Z][A-Z]-[0-9][0-9][0-9]") : DriverDetails`
- Применяется к: `String`
- SDL: `directive @Pattern(regexp : String! =".*", message : String = "graphql.validation.Pattern.message") on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение: `graphql.validation.Pattern.message`
### @Positive
Элемент должен быть положительным числом.
- Пример: `driver(points : Int @Positive) : DriverDetails`
- Применяется к: `Byte`, `Short`, `Int`, `Long`, `BigDecimal`, `BigInteger`, `Float`
- SDL: `directive @Positive(message : String = "graphql.validation.Positive.message") on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение: `graphql.validation.Positive.message`
### @PositiveOrZero
Элемент должен быть положительным числом или нулем.
- Пример: `driver(points : Int @PositiveOrZero) : DriverDetails`
- Применяется к: `Byte`, `Short`, `Int`, `Long`, `BigDecimal`, `BigInteger`, `Float`
- SDL: `directive @PositiveOrZero(message : String = "graphql.validation.PositiveOrZero.message") on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение: `graphql.validation.PositiveOrZero.message`
### @Range
Значение элемента должно находиться в пределах, заданных параметрами `min` и `max` (включительно). Принимает числа и строки, представляющие числовые значения.### @Range
Значение элемента должно находиться в пределах, заданных параметрами `min` и `max` (включительно).
- Пример: `driver(milesTravelled : Int @Range(min : 1000, max : 100000)) : DriverDetails`
- Применяется к: `String`, `Byte`, `Short`, `Int`, `Long`, `BigDecimal`, `BigInteger`, `Float`
- SDL: `directive @Range(min : Int = 0, max : Int = 2147483647, message : String = "graphql.validation.Range.message") on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение: `graphql.validation.Range.message`
### @Size
Размер элемента должен находиться в пределах, заданных параметрами `min` и `max` (включительно).
- Пример: `updateDrivingNotes(drivingNote : String @Size(min : 1000, max : 100000)) : DriverDetails`
- Применяется к: `String`, `Lists`, `Input Objects`
- SDL: `directive @Size(min : Int = 0, max : Int = 2147483647, message : String = "graphql.validation.Size.message") on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION`
- Сообщение: `graphql.validation.Size.message`
## Проблемы
Чтобы сообщить о любой ошибке, пожалуйста, используйте раздел [Issues](https://github.com/hugoDD/rains-graphql-java-extended/issues/new) проекта на GitHub.
## Лицензия
Copyright © 2018-2019 [hugoDD](https://github.com/hugoDD). Все права защищены.
Этот проект лицензирован под Apache License, Version 2.0 - подробности см. в файле [LICENSE](LICENSE).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )