All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- [Breaking] Upgraded to graphql-java v22.1
- [Breaking]
@GraphQLIgnore
'd elements can still cause conflicts #486
- [Breaking] Upgraded to graphql-java v21.3
- [Breaking] Jakarta annotations and validation groups support #472
- JacksonValueMapper ignores annotations on private fields #469
- Support arguments in batch loaders #464
- Enable ResolverInterceptors to optionally run after output conversion #463
- Enable easier exclusion of static members #460
- Restored public accessibility of
ResolvedField
#455 - Restored Java 8 support #457
- Subscription methods returning a non-null
Publisher
are now mapped correctly #458
- Upgraded to graphql-java v20.2 #437
ComplexityAnalyzer
greatly simplified and made public #450- Replaced
JavaScriptEvaluator
as the defaultComplexityFunction
with a simpler implementation #452 - Deprecated inline unions (
io.leangen.graphql.annotations.@GraphQLUnion
) for removal
@GraphQLId
deserialization toInteger
#444
- [Breaking] Upgraded to graphql-java v20.0 #437
- [Breaking] Upgraded to graphql-java v19.2 #433
- [Breaking] Replace batching strategy with
DataLoader
#432 - [Breaking] Remove custom
TypeResolutionEnvironment
(replaced with constructor-injectedGlobalEnvironment
) - [Breaking] Remove implicit mapping directives #435
- Applied directives are now correctly defined in the schema (and will be present in the SDL)
- Make it easy to customize how
Executable
s are created #383
- Improve
GraphQLSchemaGenerator
API and JavaDoc #384
- Support for
@JsonTypeInfo
#353 - [Breaking] Bring
MapToListTypeAdapter
in line with the other adapters #382
- Upgraded to graphql-java v16.2
- Complexity analysis broken with multiple named fragments #379
- Add
GraphQLError
s to the response viaResolutionEnvironment
#346
- [Breaking] Upgraded to graphql-java v16.1 #373
- [Breaking] Distinguish between no default value and null default value #374
- Easy hierarchical names for nested types:
DefaultTypeInfoGenerator#withHierarchicalNames
#310 - Reintroduce
fieldOrder
and addinputFieldOrder
#279 - Make it easier to apply a
ResolverBuilder
to specific types only #277 - Make it easy to filter interfaces in
InterfaceMappingStrategy
#299 - Support
DataFetcherResult
even when not declared #318 - Add
reason
field to@GraphQLIgnore
annotation
- Relax the mapping rules for abstract inputs (makes it easy to use e.g. Immutables and AutoValue) #293 #245
- Don't scan for implementations of concrete input types by default #332
- Collect transitive interfaces for object types #282
- Relax name collision detection: only consider
io.leangen
annotations #232 - Upgraded to graphql-java v13
- [Breaking] Filtering of fields/methods/parameters now happens before type resolution #298
- Complexity calculation for multi-root queries #313
ResolverInterceptor
s must see real underlying exceptions #314@GraphQLIgnore
should affect auto discovery only if applied directly #288
- Take annotations on private fields into account (Lombok compatibility) #160
- Optimize converter performance #250
- Use the
_mappedInputField
directive to attach meta data to input fields #216 - Generator should support accepting a bean supplier (makes prototype/dependent scoped beans easier to use) #254
- Ability to register additional Java types (used as additional interface implementations or possible union types) #208
- Support for
OffsetTime
#260
- [Breaking] Upgraded to graphql-java v12 #252
- [Breaking] Field sorting no longer possible (due to graphql-java v12 upgrade)
- Jackson and ClassGraph versions upgraded #226 #227
- Small improvements a663162
JavaDeprecationMappingConfig
accessible fromGeneratorConfiguration
4aa8c5f 7a34178- [Breaking]
java.sql.Timestamp
scalar (de)serializes to/from UTC timezone and not local time #251
- Generate valid names for array types #217
- Generate GraphQL type names for generic Java types correctly #255
- Resolve type references discovered in subscriptions and mutations #238
- Duplicate possible types in unions cause
TypeMappingException
and notIndexOutOfBoundsException
#256 - Adding custom directives can cause
NullPointerException
orIllegalStateException
#258
- Introduced full support for both schema and client directives #200
- Introduced
SchemaTransformer
to enable modifying field and argument definitions - Introduced
ResolverInterceptor
that can perform arbitrary logic around the invocation of the underlying method/field #180 #92 - Added a way to get all deserialized arguments
ResolutionEnvironment
#174 ArgumentInjectorParams#isPresent
to distinguish between the explicitly provided null input value vs no value provided #197
- Upgraded to graphql-java 11.0
- Significantly improved the performance of converter selection #194
Optional
arguments will be injected withOptional.empty
ifnull
is explicitly provided, andnull
is no value was given #197- All exceptions thrown during field resolution now bubble up unchanged (no longer wrapped in
RuntimeException
) - Try loading implementation classes using the parent class' loader first #177
- Renamed
withTypeAliasGroup
towithTypeSynonymGroup
- Fixed interface type resolution logic #168
- Arguments with default values will no longer be mapped as non-null #163
javax.annotation.Nonnull
works again #165- Fixed parsing of object/json scalar literals that contain variables
- Underlying
AnnotatedType
now accessible from the producedGraphQLType
#139 - Underlying
Operation
now accessible from the producedGraphQLFieldDefinition
#139 - String interpolation support (i18n / l10n) #162
- Jackson & Gson types (e.g.
ObjectNode
,JsonObject
etc) are now fully supported out-of-the-box. #122 - Ability to use
Connection
s (Page
) in non spec-compliant queries #152 DefaultValueProvider
can now declare a constructor acceptingGlobalEnvironment
- It is now possible to explicitly treat chosen types as equal for the purposes of name collision detection #124 #157
- Ability to register multiple
InputFieldBuilder
s #147 - Now using ClassGraph for implementation type auto discovery, bringing huge improvements in stability and performance #126 #161
- Input object fields can now have default values #131
- Existing Gson instance can now be used for configuration #132
- Ability to customize deprecation reason without annotations #133
- Ability to provide custom logic for implementation type auto discovery #135
- Support for
Iterable
- Support for
java.sql.Date/Time/Timestamp
#136
- [Breaking]
TypeMapper
interface changed to better support recursive use-cases #155 - Java primitives are now non-nullable by default #156
- [Breaking]
InputFieldDiscoveryStrategy
renamed toInputFieldBuilder
#147 - [Breaking]
InputFieldBuilder#getInputFields
now receivesInputFieldBuilderParams
- [Breaking]
ResolverBuilder
interface changed :ResolverBuilder#buildQueryResolvers/buildMutationResolvers/buildSubscriptionResolvers
now receiveResolverBuilderParams
- [Breaking]
ResolverArgumentBuilder
interface changed:ResolverArgumentBuilder#buildResolverArguments
now receivesArgumentBuilderParams
- [Breaking]
ArgumentInjector
interface changed :ArgumentInjector#getArgumentValue
now receivesArgumentInjectorParams
#158 - [Breaking]
ArgumentInjector#supports
now receives the relatedParameter
in addition to itsAnnotatedType
- [Breaking]
OperationNameGenerator
interface changed :OperationNameGenerator#generateQueryName/generateMutationName/generateSubscriptionName
now receiveOperationNameGeneratorParams
- [Breaking] All provided
OperationNameGenerator
s redesigned for reusability: the newDefaultOperationNameGenerator
should be applicable to most usages MapToListTypeAdapter
now produces non-nullable entries #145- [Breaking]
GsonValueMapperFactory.Configurer
interface changed:GsonValueMapperFactory.Configurer#configure
now receivesConfigurerParams
- [Breaking]
JacksonValueMapperFactory.Configurer
interface changed:JacksonValueMapperFactory.Configurer#configure
now receivesConfigurerParams
- [Breaking] Abstract input types with a single concrete implementation no longer have a type discriminator field
- All dependencies upgraded, most notably graphql-java in now on 9.2
- Generator methods (
withXXX
) have more intuitive behavior #123 - Default deprecation reason changed to "Deprecated" for better GraphiQL compatibility
ClassUtils#findImplementations
is superseded byClassFinder
#135
BeanOperationNameGenerator
removed. Superseded byPropertyOperationNameGenerator
.MethodOperationNameGenerator
removed. Superseded byMemberOperationNameGenerator
.ReturnTypeOperationNameGenerator
removed, as it served no purpose.DelegatingOperationNameGenerator
removed. Superseded byDefaultOperationNameGenerator
.
- Fixed
ScalarMap
deserialization error.ObjectScalarAdapter
is no longer anOutputConverter
. #106 #112 - Fixed type name collision going unnoticed when an input and an output type share a name #151
- Fixed generic type discovery for static inner classes
- Fixed double-quoting of IDs #134
- Fixed numerous problems in implementation auto discovery with fat JARs, new class format etc #111 #121 #150