1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hugosz-rains-graphql-java-extended

Клонировать/Скачать
README.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 06.06.2025 18:24 8497e87

rains-graphql-java-extended

rains-graphql-java-extended основан на graphql-java. [springboot], для улучшения схемы graphql были сделаны расширения. Основные расширения включают в себя пользовательские типы и пользовательские директивы.

license Build Status Coverage Status

Описание

  • Пользовательские типы
    • Типы времени
      • java.util.Date, java.time.LocalDate, java.time.LocalDateTime
    • Типы объектов (деревья)
  • Пользовательские директивы
    • Директивы валидации
      • @Size проверка длины, размера коллекции и т.д.
      • @Expression выражение EL
      • @AssertFalse проверка на false
      • @AssertTrue проверка на true
      • @DecimalMax проверка максимального значения
      • @DecimalMin проверка минимального значения
      • @Digits проверка формата числа
      • @Max проверка максимального значения
      • @Min проверка минимального значения
      • @Negative проверка отрицательного числа
      • @NegativeOrZero проверка отрицательного числа или нуля
      • @NotBlank проверка на непустое поле
      • @NotEmpty проверка на непустое поле и непустое значение
      • @Pattern проверка соответствия выражения
      • @Positive проверка положительного числа
      • @PositiveOrZero проверка положительного числа или нуля
      • @Range проверка диапазона## Подробное описание
Типы времени

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
}

Использование

Spring Boot

Добавьте graphql-extended-spring-boot-starter в ваш проект.

Установка

Maven

Добавьте следующее в ваш pom.xml:

<dependency>
  <groupId>com.rains.graphql</groupId>
  <artifactId>graphql-extended-spring-boot-starter</artifactId>
  <version>2.10.5</version>
</dependency>

Gradle

Добавьте следующее в ваш 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/hugosz-rains-graphql-java-extended.git
git@api.gitlife.ru:oschina-mirror/hugosz-rains-graphql-java-extended.git
oschina-mirror
hugosz-rains-graphql-java-extended
hugosz-rains-graphql-java-extended
master