Is your feature request related to a problem? Please describe.
I am frustrated when I have to manually define the responseSchema using complex builders, even though I already have well-structured DTO (Data Transfer Object) classes in my Java project.
Currently, the Java SDK requires developers to manually construct a Schema object. This leads to redundant work and high maintenance costs, as any change in the Java class must be manually reflected in the Schema builder. For example, in a project with many complex DTOs, this manual mapping is highly error-prone and degrades the Developer Experience (DX).
Describe the solution you'd like
I would like the GenerateContentConfig.Builder to support an overloaded responseSchema(Class<?> clazz) method. This method should automatically introspect the provided Java class (POJO/Record) and generate the corresponding Schema object.
Desired Usage:
// Instead of manual Schema building
GenerateContentConfig config = GenerateContentConfig.builder()
.responseMimeType("application/json")
.responseSchema(MyResponseDto.class) // Passing the DTO class directly
.build();
The SDK should ideally use reflection or existing Jackson integration to map Java types (String, Integer, List, etc.) to the Gemini Type system.
Describe alternatives you've considered
I have considered the Python Gen AI SDK, which already provides this functionality through Pydantic models. Python developers can simply pass a class to response_schema, and the SDK handles the rest.
Currently, in Java, I have to write a custom utility using jsonschema-generator and map it back to the SDK's Schema object. This feels like a feature that should be natively supported to ensure "Feature Parity" across different language SDKs.
Additional context
Since the SDK already utilizes Jackson (@JsonProperty), implementing this wouldn't necessarily require heavy new dependencies. The implementation could respect Jackson annotations:
@JsonPropertyDescription: To populate the description field in the schema.
@JsonProperty: To handle custom field naming.
This enhancement would make the Java SDK feel much more "idiomatic" and productive for enterprise-level backend development.
Is your feature request related to a problem? Please describe.
I am frustrated when I have to manually define the
responseSchemausing complex builders, even though I already have well-structured DTO (Data Transfer Object) classes in my Java project.Currently, the Java SDK requires developers to manually construct a
Schemaobject. This leads to redundant work and high maintenance costs, as any change in the Java class must be manually reflected in theSchemabuilder. For example, in a project with many complex DTOs, this manual mapping is highly error-prone and degrades the Developer Experience (DX).Describe the solution you'd like
I would like the
GenerateContentConfig.Builderto support an overloadedresponseSchema(Class<?> clazz)method. This method should automatically introspect the provided Java class (POJO/Record) and generate the correspondingSchemaobject.Desired Usage:
The SDK should ideally use reflection or existing Jackson integration to map Java types (String, Integer, List, etc.) to the Gemini
Typesystem.Describe alternatives you've considered
I have considered the Python Gen AI SDK, which already provides this functionality through Pydantic models. Python developers can simply pass a class to
response_schema, and the SDK handles the rest.Currently, in Java, I have to write a custom utility using
jsonschema-generatorand map it back to the SDK'sSchemaobject. This feels like a feature that should be natively supported to ensure "Feature Parity" across different language SDKs.Additional context
Since the SDK already utilizes Jackson (
@JsonProperty), implementing this wouldn't necessarily require heavy new dependencies. The implementation could respect Jackson annotations:@JsonPropertyDescription: To populate thedescriptionfield in the schema.@JsonProperty: To handle custom field naming.This enhancement would make the Java SDK feel much more "idiomatic" and productive for enterprise-level backend development.